Aşağıdaki gibi C # kodu birkaç örnek rastladım:
public static int Foo(this MyClass arg)
this
Bu durumda anahtar kelimenin ne anlama geldiğine ilişkin bir açıklama bulamadım . Herhangi bir görüşün var mı?
Aşağıdaki gibi C # kodu birkaç örnek rastladım:
public static int Foo(this MyClass arg)
this
Bu durumda anahtar kelimenin ne anlama geldiğine ilişkin bir açıklama bulamadım . Herhangi bir görüşün var mı?
Yanıtlar:
Bu bir uzantı yöntemidir . Bir açıklama için buraya bakın .
Genişletme yöntemleri, geliştiricilerin mevcut bir CLR türünün genel sözleşmesine alt sınıflara ayırmak veya orijinal türü yeniden derlemek zorunda kalmadan yeni yöntemler eklemelerine olanak tanır. Genişletme Yöntemleri, günümüzde dinamik diller arasında popüler olan "ördek yazma" desteğinin esnekliğinin, güçlü yazılan dillerin performansı ve derleme zamanı doğrulaması ile harmanlanmasına yardımcı olur.
Genişletme Yöntemleri, çeşitli yararlı senaryolar sağlar ve gerçekten güçlü LINQ sorgu çerçevesini mümkün kılar.
arayabileceğiniz anlamına gelir
MyClass myClass = new MyClass();
int i = myClass.Foo();
ziyade
MyClass myClass = new MyClass();
int i = Foo(myClass);
Bu, aşağıda belirtildiği gibi akıcı arayüzlerin oluşturulmasına izin verir .
Scott Gu'nun alıntılanan blog yazısı bunu güzel bir şekilde açıklıyor.
Benim için sorunun cevabı bu yazıda aşağıdaki ifadede yer alıyor:
Yukarıdaki statik yöntemin, string türünün ilk parametre bağımsız değişkeninden önce nasıl "this" anahtar sözcüğüne sahip olduğuna dikkat edin. Bu derleyiciye, bu özel Uzantı Yöntemi'nin "string" türündeki nesnelere eklenmesi gerektiğini bildirir. IsValidEmailAddress () yöntemi uygulaması içinde, daha sonra yöntemin çağrıldığı gerçek dize örneğinin genel özelliklerine / yöntemlerine / olaylarına erişebilir ve geçerli bir e-posta olup olmadığına bağlı olarak true / false döndürebilirim.
this
Anahtar kelimenin yöntem imzasındaki asıl amacının ne olduğunu açıklayan tek cevap budur. Diğer cevaplar sadece yararsız bir şekilde "bu bir uzantı yöntemi" diyor. Genişletme yöntemlerinin bu cevabı okuyana kadar genişlettikleri tiplere nasıl "bağlandığını" tam olarak anlamadım. Teşekkür ederim!
Preet Sangha'nın açıklamasına ek olarak:
Intellisense, genişletme yöntemlerini mavi bir okla görüntüler (örneğin, "Toplam <>" önünde):
İhtiyacın var
using the.namespace.of.the.static.class.with.the.extension.methods;
uzantı yöntemlerinin görünmesi ve kullanılabilir olması için, bunları kullanan koddan farklı bir ad alanındaysa.
Bunlar uzatma yöntemleridir . Yepyeni akıcı bir dünyaya hoş geldiniz . :)
Geçen gün bunu kendim öğrendim: bu anahtar kelime, yöntemin onu ilerleyen sınıfın bir uzantısı olduğunu tanımlar. Örneğiniz için, MyClass'ın Foo adında yeni bir uzantı yöntemi olacaktır (bu, herhangi bir parametreyi kabul etmez ve bir int döndürür; diğer herkese açık yöntemlerde olduğu gibi kullanılabilir).
"this" parametre listesindeki bir sonraki sınıfı genişletir
Bu nedenle, "bu" altındaki yöntem imzasında "String" i genişletir. Çizgi, yönteme normal bir argüman olarak işleve iletilir. public static string [] SplitCsvLine (bu Dize satırı)
Yukarıdaki örnekte "this" sınıfı yerleşik "String" sınıfını genişletiyor.