Extension method
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C# di Coddy. Pelajaran 39 dari 70.
Extension methods memungkinkan kamu menambahkan method baru ke tipe yang sudah ada tanpa mengubah kode sumbernya atau membuat class turunan. Method ini tampak seperti method bawaan tipe tersebut, sehingga kodemu lebih mudah dibaca dan dipahami.
Untuk membuat extension method, definisikan method static di dalam class static, dengan parameter pertama yang didahului kata kunci this:
public static class StringExtensions
{
public static int WordCount(this string str)
{
return str.Split(' ').Length;
}
}Sekarang kamu dapat memanggil method ini langsung pada string apa pun:
string sentence = "Hello World Today";
int count = sentence.WordCount(); // 3Parameter this string str memberi tahu kompiler bahwa method ini memperluas tipe string. Saat kamu memanggil sentence.WordCount(), kompiler menerjemahkannya menjadi StringExtensions.WordCount(sentence) di balik layar.
Extension method juga dapat menerima parameter tambahan:
public static bool IsLongerThan(this string str, int length)
{
return str.Length > length;
}
// Penggunaan
bool result = "Hello".IsLongerThan(3); // trueTeknik ini banyak digunakan di LINQ, tempat method seperti Where() dan Select() menjadi extension method untuk IEnumerable. Extension method sangat berguna untuk menambahkan fungsi utilitas ke tipe yang tidak kamu kendalikan, sehingga kodemu tetap rapi dan ekspresif.
Tantangan
MudahMari buat sekumpulan extension method yang berguna untuk bilangan bulat dan menambahkan fungsi praktis yang biasanya kamu harapkan sudah tersedia. Kamu akan membuat class static yang berisi extension method yang dapat dipanggil langsung pada bilangan bulat apa pun, sehingga kodemu lebih ekspresif dan mudah dibaca.
Kamu akan menyusun kodemu dalam dua file:
IntExtensions.cs: Buat class static bernamaIntExtensionsdi namespaceUtilities. Class ini akan berisi extension method yang meningkatkan tipeint:IsEven()- mengembalikantruejika bilangan tersebut genap, danfalsejika tidakSquare()- mengembalikan hasil perkalian bilangan tersebut dengan dirinya sendiriIsInRange(int min, int max)- mengembalikantruejika bilangan tersebut berada di antara min dan max (inklusif), danfalsejika tidak
thisuntuk menentukan tipe yang kamu perluas.Program.cs: Di file utama, baca bilangan bulat dari input dan tunjukkan penggunaan ketiga extension method. Panggil setiap method langsung pada bilangan bulat seolah-olah method tersebut sudah tersedia secara bawaan, lalu cetak hasilnya.
Kamu akan menerima tiga input:
- Bilangan yang akan diuji (bilangan bulat)
- Nilai minimum untuk pemeriksaan rentang (bilangan bulat)
- Nilai maksimum untuk pemeriksaan rentang (bilangan bulat)
Cetak output dengan format ini:
Is {number} even? {True/False}
Square of {number}: {result}
Is {number} in range [{min}-{max}]? {True/False}Misalnya, jika inputnya adalah 7, 5, dan 10, outputnya akan seperti ini:
Is 7 even? False
Square of 7: 49
Is 7 in range [5-10]? TruePerhatikan betapa alami kamu dapat menulis number.IsEven() dan number.Square(). Extension method ini terasa seperti sudah selalu menjadi bagian dari tipe bilangan bulat!
Coba sendiri
using System;
using Utilities;
class Program
{
public static void Main(string[] args)
{
// Baca input
int number = Convert.ToInt32(Console.ReadLine());
int min = Convert.ToInt32(Console.ReadLine());
int max = Convert.ToInt32(Console.ReadLine());
// TODO: Gunakan method ekstensi pada 'number' dan cetak hasilnya
// Panggil number.IsEven(), number.Square(), dan number.IsInRange(min, max)
// Cetak dengan format berikut:
// Apakah {number} genap? {True/False}
// Kuadrat dari {number}: {result}
// Apakah {number} berada dalam rentang [{min}-{max}]? {True/False}
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalNamespace & DirektifPengantar class & objectKata Kunci 'this'Method dan ParameterField vs PropertyKonstruktorInisialisasi objectRingkasan: Kalkulator Sederhana4Pewarisan
Sintaks Dasar Pewarisan (:)Kata Kunci 'base'Kata Kunci Virtual & OverrideClass SealedBase Class 'object'Rangkuman: Hierarki Karyawan7Fitur Lanjutan
Overloading OperatorIndexer (this[])Penimpaan ToString()Extension methodRingkasan: Custom list2Property & Anggota Statis
Property yang Diimplementasikan OtomatisProperty Hanya Baca dan Hanya TulisField dan method StatisClass StatisAnggota Berbentuk Ekspresi5Polimorfisme & Antarmuka
Polimorfisme saat kompilasi vs runtimeAntarmuka vs kelas abstrakBeberapa antarmukaAntarmuka eksplisitUpcasting & DowncastingRingkasan, Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi daripada PewarisanGenerics (class dan method)Delegate dan EventAtribut dan ReflectionIDisposable dan Pernyataan usingDasar-Dasar Dependency Injection11Pola Desain Bagian 2
Pola PerintahPola AdapterPola DecoratorPola Template MethodPola StatePola CompositeLatihan sendiri: Compiler C# online