Delegate Sınıf

Tanım

Statik bir yönteme veya bir sınıf örneğine ve bu sınıfın örnek yöntemine başvuran bir veri yapısı olan bir temsilciyi temsil eder.

public ref class Delegate abstract
public ref class Delegate abstract : ICloneable, System::Runtime::Serialization::ISerializable
public abstract class Delegate
public abstract class Delegate : ICloneable, System.Runtime.Serialization.ISerializable
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDual)]
[System.Serializable]
public abstract class Delegate : ICloneable, System.Runtime.Serialization.ISerializable
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDual)]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class Delegate : ICloneable, System.Runtime.Serialization.ISerializable
type Delegate = class
type Delegate = class
    interface ICloneable
    interface ISerializable
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDual)>]
[<System.Serializable>]
type Delegate = class
    interface ICloneable
    interface ISerializable
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDual)>]
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Delegate = class
    interface ICloneable
    interface ISerializable
Public MustInherit Class Delegate
Public MustInherit Class Delegate
Implements ICloneable, ISerializable
Devralma
Delegate
Türetilmiş
Öznitelikler
Uygulamalar

Açıklamalar

Delegate sınıfı, temsilci türleri için temel sınıftır. Ancak, yalnızca sistem ve derleyiciler açıkça Delegate sınıfından veya MulticastDelegate sınıfından türetilebilir. Temsilci türünden yeni bir tür türetme izni de verilmemektedir. Delegate sınıfı temsilci türü olarak kabul edilmez; temsilci türlerini türetmek için kullanılan bir sınıftır.

Çoğu dil bir delegate anahtar sözcüğü uygular ve bu diller için derleyiciler MulticastDelegate sınıfından türetilir; bu nedenle, kullanıcıların dil tarafından sağlanan delegate anahtar sözcüğünü kullanması gerekir.

Not

Ortak dil çalışma zamanı, temsilciyle aynı imzaya sahip her temsilci türü için bir Invoke yöntemi sağlar. Derleyiciler otomatik olarak çağırdığı için bu yöntemi açıkça C#, Visual Basic veya Visual C++'tan çağırmanız gerekmez. Invoke yöntemi, temsilci türünün imzasını bulmak istediğinizde yansıma yararlıdır.

Ortak dil çalışma zamanı, temsilcinin zaman uyumsuz çağrısını etkinleştirmek için her temsilci türüne BeginInvoke ve EndInvoke yöntemleri sağlar. Bu yöntemler hakkında daha fazla bilgi için bkz. Zaman Uyumlu Yöntemleri Zaman Uyumsuz Olarak Çağırma.

Temsilci türü bildirimi, bir veya daha fazla yöntemin imzasını belirten bir sözleşme oluşturur. Temsilci, aşağıdakilere başvurular içeren bir temsilci türünün örneğidir:

  • Bir türün örnek yöntemi ve bu türe atanabilir bir hedef nesne.

  • Resmi parametre listesinde gizli this parametresinin gösterildiği bir tür örneği yöntemi. Temsilcinin açık örnek temsilcisi olduğu söylenir.

  • Statik bir yöntem.

  • Statik bir yöntem ve yöntemin ilk parametresine atanabilir bir hedef nesne. Temsilcinin ilk bağımsız değişkeni üzerinden kapatılacağı söylenir.

Temsilci bağlaması hakkında daha fazla bilgi için bkz. CreateDelegate(Type, Object, MethodInfo, Boolean) yöntemi aşırı yüklemesi.

Temsilci ilk bağımsız değişkeni (en yaygın durum) üzerinden kapatılan bir örnek yöntemini temsil ettiğinde, temsilci yöntemin giriş noktasına bir başvuruyu ve yöntemi tanımlayan türe atanabilen hedef adlı bir nesneye başvuruyu depolar. Bir temsilci açık örnek yöntemini temsil ettiğinde, yöntemin giriş noktasına bir başvuru depolar. Temsilci imzası, gizli this parametresini resmi parametre listesinde içermelidir; bu durumda, temsilcinin bir hedef nesneye başvurusu yoktur ve temsilci çağrıldığında bir hedef nesne sağlanmalıdır.

Bir temsilci statik bir yöntemi temsil ettiğinde, temsilci yöntemin giriş noktasına bir başvuru depolar. Temsilci ilk bağımsız değişkeni üzerinde kapatılan statik bir yöntemi temsil ettiğinde, temsilci yöntemin giriş noktasına bir başvuruyu ve yöntemin ilk bağımsız değişkeninin türüne atanabilen hedef nesneye başvuruyu depolar. Temsilci çağrıldığında, statik yöntemin ilk bağımsız değişkeni hedef nesneyi alır. Bu ilk bağımsız değişken bir başvuru türü olmalıdır.

Bir temsilcinin çağrı listesi, listenin her öğesinin temsilci tarafından temsil edilen yöntemlerden tam olarak birini çağırdığı sıralı bir temsilci kümesidir. Çağırma listesi yinelenen yöntemler içerebilir. Çağırma sırasında yöntemler çağrı listesinde göründükleri sırayla çağrılır. Temsilci, çağırma listesindeki her yöntemi çağırmayı dener; yinelemeleri, çağrı listesinde her göründüklerinde bir kez çağrılır. Temsilciler sabittir; oluşturulduktan sonra, temsilcinin çağrı listesi değişmez.

Temsilci bir veya daha fazla yöntemi çağırabildiğinden ve işlemleri birleştirmede kullanılabildiğinden temsilciler çok noktaya yayın veya birleştirilebilir olarak adlandırılır.

Combine ve Removegibi işlemlerin birleştirilmesi, mevcut temsilcileri değiştirmez. Bunun yerine, böyle bir işlem işlemin sonuçlarını, değişmemiş bir temsilciyi veya nulliçeren yeni bir temsilci döndürür. Birleştirme işlemi, işlemin sonucu en az bir yönteme başvurmayan bir temsilci olduğunda null döndürür. bir birleştirme işlemi, istenen işlemin hiçbir etkisi olmadığında değişmemiş bir temsilci döndürür.

Not

Yönetilen diller, temsilci işlemlerini uygulamak için Combine ve Remove yöntemlerini kullanır. Örnek olarak Visual Basic'teki AddHandler ve RemoveHandler deyimleri ile C# içindeki temsilci türlerindeki += ve -= işleçleri verilebilir.

.NET Framework 4'den başlayarak, genel temsilci türlerinin değişken türü parametreleri olabilir. Değişken karşıtı tür parametreleri, temsilcinin parametre türleri olarak kullanılabilir ve dönüş türü olarak birlikte değişken türü parametresi kullanılabilir. Bu özellik, Kovaryans ve Contravariance'da açıklandığı gibi, tür bağımsız değişkenleri devralma ilişkisine sahip başvuru türleriyse, aynı genel tür tanımından inşa edilen genel temsilci türlerinin atamayla uyumlu olmasını sağlar.

Not

Varyans nedeniyle atamayla uyumlu olan genel temsilciler her zaman birleştirilebilir değildir. Birleştirilebilir olması için türlerin tam olarak eşleşmesi gerekir. Örneğin, Derived adlı bir sınıfın Baseadlı bir sınıftan türetildiğini varsayalım. Action<Base> türünde bir temsilci (Visual Basic'teAction(Of Base)) Action<Derived>türünde bir değişkene atanabilir, ancak türler tam olarak eşleşmediğinden iki temsilci birleştirilemez.

Çağrılan yöntem bir özel durum oluşturursa, yöntem yürütmeyi durdurur, özel durum temsilcinin çağırana geri geçirilir ve çağırma listesindeki kalan yöntemler çağrılmıyor. Çağıranda özel durumun yakalanması bu davranışı değiştirmez.

Bir temsilci tarafından çağrılan yöntemlerin imzası bir dönüş değeri içerdiğinde, temsilci çağırma listesindeki son öğenin dönüş değerini döndürür. İmza başvuruyla geçirilen bir parametre içerdiğinde, parametrenin son değeri çağırma listesindeki her yöntemin sırayla yürütülmesi ve parametrenin değerinin güncelleştirilmesi sonucudur.

C'deki bir temsilcinin en yakın eşdeğeri bir işlev işaretçisidir. Temsilci statik bir yöntemi veya örnek yöntemini temsil edebilir. Temsilci bir örnek yöntemini temsil ettiğinde, temsilci yalnızca yöntemin giriş noktasına bir başvuruyu değil, aynı zamanda sınıf örneğine de başvuruyu depolar. İşlev işaretçilerinin aksine, temsilciler nesne odaklıdır ve tür güvenlidir.

Örnekler için bkz. System.Delegate.CreateDelegateiçin ek API açıklamaları .

Oluşturucular

Delegate(Object, String)

Belirtilen sınıf örneğinde belirtilen örnek yöntemini çağıran bir temsilci başlatır.

Delegate(Type, String)

Belirtilen statik yöntemi belirtilen sınıftan çağıran bir temsilci başlatır.

Özellikler

HasSingleTarget

Delegate tek bir çağırma hedefi olup olmadığını gösteren bir değer alır.

Method

Temsilci tarafından temsil edilen yöntemi alır.

Target

Geçerli temsilcinin örnek yöntemini çağırdığı sınıf örneğini alır.

Yöntemler

Clone()

Temsilcinin sığ bir kopyasını oluşturur.

Combine(Delegate, Delegate)

İki temsilcinin çağrı listelerini birleştirir.

Combine(Delegate[])

Bir temsilci dizisinin çağrı listelerini birleştirir.

Combine(ReadOnlySpan<Delegate>)

Bir temsilci aralığının çağrı listelerini birleştirir.

CombineImpl(Delegate)

Belirtilen çok noktaya yayın (birleştirilebilir) temsilcisinin ve geçerli çok noktaya yayın (birleştirilebilir) temsilcinin çağrı listelerini birleştirir.

CreateDelegate(Type, MethodInfo)

Belirtilen yöntemi temsil etmek için belirtilen türde bir temsilci oluşturur.

CreateDelegate(Type, MethodInfo, Boolean)

Belirtilen statik yöntemi temsil etmek için belirtilen türün bir temsilcisini oluşturur ve bağlanma hatasında belirtilen davranış gösterilir.

CreateDelegate(Type, Object, MethodInfo)

Belirtilen ilk bağımsız değişkenle belirtilen statik veya örnek yöntemini temsil eden belirtilen türde bir temsilci oluşturur.

CreateDelegate(Type, Object, MethodInfo, Boolean)

Belirtilen statik veya örnek yöntemini temsil eden, belirtilen ilk bağımsız değişken ve bağlama hatasında belirtilen davranışla belirtilen türde bir temsilci oluşturur.

CreateDelegate(Type, Object, String)

Belirtilen sınıf örneğinde çağrılacak belirtilen örnek yöntemini temsil eden belirtilen türde bir temsilci oluşturur.

CreateDelegate(Type, Object, String, Boolean)

Belirtilen büyük/küçük harf duyarlılığıyla belirtilen sınıf örneğinde çağrılacak belirtilen örnek yöntemini temsil eden belirtilen türde bir temsilci oluşturur.

CreateDelegate(Type, Object, String, Boolean, Boolean)

Belirtilen sınıf örneğinde çağrılacak belirtilen örnek yöntemini temsil eden belirtilen türde bir temsilci oluşturur; belirtilen büyük/küçük harf duyarlılığı ve bağlanma hatasında belirtilen davranış.

CreateDelegate(Type, Type, String)

Belirtilen sınıfın belirtilen statik yöntemini temsil eden belirtilen türde bir temsilci oluşturur.

CreateDelegate(Type, Type, String, Boolean)

Belirtilen büyük/küçük harf duyarlılığı ile belirtilen sınıfın belirtilen statik yöntemini temsil eden belirtilen türde bir temsilci oluşturur.

CreateDelegate(Type, Type, String, Boolean, Boolean)

Belirtilen sınıfın belirtilen statik yöntemini temsil eden belirtilen türde, belirtilen büyük/küçük harf duyarlılığı ve bağlama hatasında belirtilen davranış ile bir temsilci oluşturur.

DynamicInvoke(Object[])

Geçerli temsilci tarafından temsil edilen yöntemi dinamik olarak çağırır (geç bağlı).

DynamicInvokeImpl(Object[])

Geçerli temsilci tarafından temsil edilen yöntemi dinamik olarak çağırır (geç bağlı).

EnumerateInvocationList<TDelegate>(TDelegate)

Bu temsilcinin çağrı hedefleri için bir numaralandırıcı alır.

Equals(Object)

Belirtilen nesnenin ve geçerli temsilcinin aynı türde olup olmadığını belirler ve aynı hedefleri, yöntemleri ve çağrı listesini paylaşır.

GetHashCode()

Temsilci için bir karma kodu döndürür.

GetInvocationList()

Temsilcinin çağrı listesini döndürür.

GetMethodImpl()

Geçerli temsilci tarafından temsil edilen yöntemini alır.

GetObjectData(SerializationInfo, StreamingContext)
Geçersiz.

Desteklenmez.

GetType()

Geçerli örneğin Type alır.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli Objectbasit bir kopyasını oluşturur.

(Devralındığı yer: Object)
Remove(Delegate, Delegate)

Bir temsilcinin çağrı listesinin son oluşumunu başka bir temsilcinin çağrı listesinden kaldırır.

RemoveAll(Delegate, Delegate)

Bir temsilcinin çağrı listesinin tüm oluşumlarını başka bir temsilcinin çağrı listesinden kaldırır.

RemoveImpl(Delegate)

Bir temsilcinin çağrı listesini başka bir temsilcinin çağrı listesinden kaldırır.

ToString()

Geçerli nesneyi temsil eden bir dize döndürür.

(Devralındığı yer: Object)

İşleçler

Equality(Delegate, Delegate)

Belirtilen temsilcilerin eşit olup olmadığını belirler.

Inequality(Delegate, Delegate)

Belirtilen temsilcilerin eşit olup olmadığını belirler.

Uzantı Metotları

GetMethodInfo(Delegate)

Belirtilen temsilci tarafından temsil edilen yöntemi temsil eden bir nesnesi alır.

Şunlara uygulanır

Ayrıca bkz.