Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, herhangi bir .NET türü için kendi uzantı yöntemlerinizi nasıl uygulayabilirsiniz gösterilmektedir. İstemci kodu uzantı yöntemlerinizi kullanabilir. İstemci projeleri, bunları içeren derlemeye başvurmalıdır. İstemci projeleri, uzantı yöntemlerinin tanımlandığı ad alanını belirten bir using yönergesi eklemelidir.
C# 14'le başlayarak, uzantı yöntemlerini tanımlamak için kullanabileceğiniz iki söz dizimi vardır. C# 14, bir tür için genişletme üyeleri tanımladığınız genişletme blokları ekler. C# 14'ün öncesinde , yöntemin parametre türünün bir örneğinin üyesi olarak göründüğünü belirtmek için bu değiştiriciyi statik yöntemin ilk parametresine eklersiniz.
Uzantı blokları (C# 14 ve üzeri)
C# 14'le başlayarak, uzantı bloklarını kullanarak uzantı yöntemlerini bildirebilirsiniz. Uzantı bloğu, iç içe olmayan, genel olmayan, statik bir sınıfta, bir tür veya o türün bir örneği için uzantı üyeleri içeren bir bloktur.
Uzantı bloklarını kullanarak bir uzantı yöntemi tanımlamak ve çağırmak için:
- Uzantı yöntemini içerecek statik bir sınıf tanımlayın. Sınıf başka bir türün içinde yer alamaz ve istemci kodu tarafından görülebilir olmalıdır. Erişilebilirlik kuralları hakkında daha fazla bilgi için bkz . Erişim Değiştiricileri.
- Bir tür için uzantı üyelerini bildirmek amacıyla bir uzantı bloğu kullanın.
- Çağıran kodda, uzantı yöntemi sınıfını içeren ad alanını
usingbelirtmek için bir yönerge ekleyin. - Yöntemleri tür üzerinde örnek yöntemler olarak çağırın.
Aşağıdaki örnek, C# 14 uzantı bloğu söz dizimini kullanarak adlı WordCount bir uzantı yöntemi uygular. Bu yöntem String sınıfı üzerinde çalışır.
CustomExtensions ad alanı, uygulama ad alanına içe aktarılır ve bu yöntem, bir string üzerinde örnek yöntemiymiş gibi çağrılır.
using CustomExtensions;
string s = "The quick brown fox jumped over the lazy dog.";
// Call the method as if it were an
// instance method on the type. Note that the first
// parameter is not specified by the calling code.
int i = s.WordCount();
System.Console.WriteLine($"Word count of s is {i}");
namespace CustomExtensions
{
// Extension methods must be defined in a static class.
public static class StringExtension
{
extension(string str)
{
// This is the extension member.
// The `str` parameter is declared on the extension declaration.
public int WordCount()
{
return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
}
}
Uzantı yöntemleri (önceki sürümler)
C# 14'e geçmeden önce, bu değiştiriciyi statik yöntemin ilk parametresine ekleyerek bir uzantı yöntemi bildirirsiniz.
Klasik söz dizimini kullanarak bir uzantı yöntemi tanımlamak ve çağırmak için:
- Uzantı yöntemini içerecek statik bir sınıf tanımlayın. Sınıf başka bir türün içinde yer alamaz ve istemci kodu tarafından görülebilir olmalıdır. Erişilebilirlik kuralları hakkında daha fazla bilgi için bkz . Erişim Değiştiricileri.
- Uzantı yöntemini, içeren sınıfla en az aynı görünürlüğe sahip statik bir yöntem olarak uygulayın.
- yönteminin ilk parametresi, yöntemin üzerinde çalıştığı türü belirtir; önünde bu değiştirici bulunmalıdır.
- Çağıran kodda, uzantı yöntemi sınıfını içeren ad alanını
usingbelirtmek için bir yönerge ekleyin. - Yöntemleri tür üzerinde örnek yöntemler olarak çağırın.
Aşağıdaki örnek, klasik söz dizimini kullanarak adlı WordCount bir uzantı yöntemi uygular. Yöntem, ilk yöntem parametresi olarak this değiştirici ile belirtilen String sınıfı üzerinde çalışır. Ad alanı CustomExtensions, uygulama ad alanına aktarılır ve yöntem, dizede bir örnek yöntem olarak çağrılır.
using CustomExtensions;
string s = "The quick brown fox jumped over the lazy dog.";
// Call the method as if it were an
// instance method on the type. Note that the first
// parameter is not specified by the calling code.
int i = s.WordCount();
System.Console.WriteLine($"Word count of s is {i}");
namespace CustomExtensions
{
// Extension methods must be defined in a static class.
public static class StringExtension
{
// This is the extension method.
// The first parameter takes the "this" modifier
// and specifies the type to be extended.
public static int WordCount(this string str)
{
return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
}
Not
yöntemin uygulandığı türü temsil ettiği ve derleyici nesnenizin türünü zaten bildiği için ilk parametre kod çağrılarak belirtilmez. Yalnızca 2 ile n arasındaki parametreler için bağımsız değişkenler sağlamanız gerekir.
Genel bilgiler
Aşırı yükleme çözümlemesi, türü tarafından tanımlanan örnek veya statik yöntemleri uzantı yöntemlerine tercih eder. Uzantı yöntemleri genişletilmiş sınıftaki hiçbir özel veriye erişemez.