Saya telah menemukan beberapa contoh kode C # seperti berikut:
public static int Foo(this MyClass arg)
Saya belum dapat menemukan penjelasan tentang arti this
kata kunci dalam kasus ini. Ada wawasan?
Saya telah menemukan beberapa contoh kode C # seperti berikut:
public static int Foo(this MyClass arg)
Saya belum dapat menemukan penjelasan tentang arti this
kata kunci dalam kasus ini. Ada wawasan?
Jawaban:
Ini adalah metode ekstensi . Lihat di sini untuk penjelasan .
Metode ekstensi memungkinkan pengembang untuk menambahkan metode baru ke kontrak publik dari tipe CLR yang ada, tanpa harus mensubklasifikasikan atau mengkompilasi ulang tipe aslinya. Metode Penyuluhan membantu memadukan fleksibilitas dukungan "mengetik bebek" yang populer di dalam bahasa dinamis saat ini dengan kinerja dan validasi waktu kompilasi dari bahasa yang diketik dengan kuat.
Metode Ekstensi memungkinkan berbagai skenario yang berguna, dan membantu memungkinkan kerangka kerja kueri LINQ yang sangat kuat ....
itu berarti Anda dapat menelepon
MyClass myClass = new MyClass();
int i = myClass.Foo();
daripada
MyClass myClass = new MyClass();
int i = Foo(myClass);
Hal ini memungkinkan pembangunan antarmuka yang lancar seperti yang dinyatakan di bawah ini.
Posting blog yang dikutip oleh Scott Gu menjelaskannya dengan baik.
Bagi saya, jawaban atas pertanyaan tersebut adalah dalam pernyataan berikut di pos itu:
Perhatikan bagaimana metode statis di atas memiliki kata kunci "ini" sebelum argumen parameter pertama dari tipe string. Ini memberitahu kompiler bahwa Metode Ekstensi khusus ini harus ditambahkan ke objek tipe "string". Di dalam implementasi metode IsValidEmailAddress (), saya kemudian dapat mengakses semua properti / metode / peristiwa publik dari instance string aktual yang digunakan oleh metode tersebut, dan mengembalikan true / false tergantung pada apakah itu email yang valid atau tidak.
this
kata kunci dalam metode tanda tangan. Jawaban lain hanya mengatakan, "ini metode ekstensi." Saya tidak pernah sepenuhnya memahami bagaimana metode ekstensi "melampirkan" pada jenis yang mereka kembangkan sampai membaca jawaban ini. Terima kasih!
Selain penjelasan Preha Sangha:
Intellisense menampilkan metode ekstensi dengan panah biru (misalnya di depan "Agregat <>"):
Anda membutuhkan
using the.namespace.of.the.static.class.with.the.extension.methods;
untuk metode ekstensi muncul dan tersedia, jika mereka berada dalam namespace yang berbeda dari kode yang menggunakannya.
Mereka adalah metode ekstensi . Selamat datang di dunia fasih baru . :)
Saya baru belajar ini sendiri beberapa hari yang lalu: kata kunci ini mendefinisikan bahwa metode telah menjadi perpanjangan dari kelas yang menghasilkannya. Jadi untuk contoh Anda, MyClass akan memiliki metode ekstensi baru yang disebut Foo (yang tidak menerima parameter apa pun dan mengembalikan int; dapat digunakan seperti metode publik lainnya).
"Ini" memperluas kelas berikutnya dalam daftar parameter
Jadi dalam metode tanda tangan di bawah "this" extends "String". Baris dilewatkan ke fungsi sebagai argumen normal ke metode. public static string [] SplitCsvLine (baris string ini)
Dalam contoh di atas, kelas "this" memperluas kelas "String" bawaan.