Delegate Kelas

Definisi

Mewakili delegasi, yang merupakan struktur data yang mengacu pada metode statis atau ke instans kelas dan metode instans kelas tersebut.

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
Warisan
Delegate
Turunan
Atribut
Penerapan

Keterangan

Kelas Delegate adalah kelas dasar untuk jenis delegasi. Namun, hanya sistem dan kompilator yang dapat berasal secara eksplisit dari Delegate kelas atau dari MulticastDelegate kelas . Ini juga tidak diizinkan untuk mendapatkan jenis baru dari jenis delegasi. Kelas Delegate tidak dianggap sebagai jenis delegasi; kelas ini adalah kelas yang digunakan untuk memperoleh jenis delegasi.

Sebagian besar bahasa mengimplementasikan delegate kata kunci, dan pengkompilasi untuk bahasa tersebut dapat berasal dari MulticastDelegate kelas ; oleh karena itu, pengguna harus menggunakan delegate kata kunci yang disediakan oleh bahasa.

Catatan

Runtime bahasa umum menyediakan Invoke metode untuk setiap jenis delegasi, dengan tanda tangan yang sama dengan delegasi. Anda tidak perlu memanggil metode ini secara eksplisit dari C#, Visual Basic, atau Visual C++, karena pengkompilasi memanggilnya secara otomatis. Metode Invoke ini berguna dalam refleksi ketika Anda ingin menemukan tanda tangan jenis delegasi.

Runtime bahasa umum menyediakan setiap jenis delegasi dengan BeginInvoke metode dan EndInvoke , untuk mengaktifkan pemanggilan asinkron delegasi. Untuk informasi selengkapnya tentang metode ini, lihat Memanggil Metode Sinkron Secara Asinkron.

Deklarasi jenis delegasi menetapkan kontrak yang menentukan tanda tangan satu atau beberapa metode. Delegasi adalah instans jenis delegasi yang memiliki referensi untuk:

  • Metode instans jenis dan objek target yang dapat ditetapkan ke jenis tersebut.

  • Metode instans jenis , dengan parameter tersembunyi this yang diekspos dalam daftar parameter formal. Delegasi dikatakan sebagai delegasi instans terbuka.

  • Metode statis.

  • Metode statis dan objek target yang dapat ditetapkan ke parameter pertama metode . Delegasi dikatakan ditutup selama argumen pertamanya.

Untuk informasi selengkapnya tentang pengikatan delegasi, lihat CreateDelegate(Type, Object, MethodInfo, Boolean) metode kelebihan beban.

Ketika delegasi mewakili metode instans yang ditutup di atas argumen pertamanya (kasus yang paling umum), delegasi menyimpan referensi ke titik masuk metode dan referensi ke objek, yang disebut target, yang merupakan jenis yang dapat ditetapkan ke jenis yang menentukan metode. Saat delegasi mewakili metode instans terbuka, delegasi menyimpan referensi ke titik masuk metode. Tanda tangan delegasi harus menyertakan parameter tersembunyi this dalam daftar parameter formalnya; dalam hal ini, delegasi tidak memiliki referensi ke objek target, dan objek target harus disediakan ketika delegasi dipanggil.

Saat delegasi mewakili metode statis, delegasi menyimpan referensi ke titik masuk metode. Ketika delegasi mewakili metode statis yang ditutup di atas argumen pertamanya, delegasi menyimpan referensi ke titik masuk metode dan referensi ke objek target yang dapat ditetapkan ke jenis argumen pertama metode. Ketika delegasi dipanggil, argumen pertama dari metode statis menerima objek target. Argumen pertama ini harus berupa tipe referensi.

Daftar pemanggilan delegasi adalah sekumpulan delegasi yang diurutkan di mana setiap elemen daftar memanggil salah satu metode yang diwakili oleh delegasi. Daftar pemanggilan dapat berisi metode duplikat. Selama pemanggilan, metode dipanggil dalam urutan muncul dalam daftar pemanggilan. Delegasi mencoba memanggil setiap metode dalam daftar pemanggilannya; duplikat dipanggil sekali untuk setiap kali muncul dalam daftar pemanggilan. Delegasi tidak dapat diubah; setelah dibuat, daftar pemanggilan delegasi tidak berubah.

Delegasi disebut sebagai multicast, atau dapat dikombinasikan, karena delegasi dapat memanggil satu atau beberapa metode dan dapat digunakan dalam menggabungkan operasi.

Menggabungkan operasi, seperti Combine dan Remove, tidak mengubah delegasi yang ada. Sebaliknya, operasi seperti itu mengembalikan delegasi baru yang berisi hasil operasi, delegasi yang tidak berubah, atau null. Operasi gabungan kembali null ketika hasil operasi adalah delegasi yang tidak mereferensikan setidaknya satu metode. Operasi gabungan mengembalikan delegasi yang tidak berubah ketika operasi yang diminta tidak berpengaruh.

Catatan

Bahasa terkelola Combine menggunakan metode dan Remove untuk menerapkan operasi delegasi. Contohnya AddHandler termasuk pernyataan dan RemoveHandler di Visual Basic dan operator += dan -= pada jenis delegasi di C#.

Dimulai dengan .NET Framework 4, jenis delegasi generik dapat memiliki parameter jenis varian. Parameter jenis kontravarian dapat digunakan sebagai jenis parameter delegasi, dan parameter jenis kovarian dapat digunakan sebagai jenis pengembalian. Fitur ini memungkinkan jenis delegasi generik yang dibangun dari definisi jenis generik yang sama agar kompatibel dengan penugasan jika argumen jenisnya adalah jenis referensi dengan hubungan pewarisan, seperti yang dijelaskan dalam Kovariansi dan Kontravariansi.

Catatan

Delegasi generik yang kompatibel dengan penugasan karena varians belum tentu dapat dikombinasikan. Agar dapat dikombinasikan, jenisnya harus sama persis. Misalnya, misalkan kelas bernama Derived berasal dari kelas bernama Base. Delegasi jenis Action<Base> (Action(Of Base) di Visual Basic) dapat ditetapkan ke variabel jenis Action<Derived>, tetapi kedua delegasi tidak dapat digabungkan karena jenisnya tidak sama persis.

Jika metode yang dipanggil melempar pengecualian, metode berhenti dijalankan, pengecualian diteruskan kembali ke pemanggil delegasi, dan metode yang tersisa dalam daftar pemanggilan tidak dipanggil. Menangkap pengecualian dalam pemanggil tidak mengubah perilaku ini.

Saat tanda tangan metode yang dipanggil oleh delegasi menyertakan nilai pengembalian, delegasi mengembalikan nilai pengembalian elemen terakhir dalam daftar pemanggilan. Ketika tanda tangan menyertakan parameter yang diteruskan oleh referensi, nilai akhir parameter adalah hasil dari setiap metode dalam daftar pemanggilan yang dijalankan secara berurutan dan memperbarui nilai parameter.

Yang paling setara dengan delegasi di C adalah penunjuk fungsi. Delegasi dapat mewakili metode statis atau metode instans. Ketika delegasi mewakili metode instans, delegasi tidak hanya menyimpan referensi ke titik masuk metode, tetapi juga referensi ke instans kelas. Tidak seperti penunjuk fungsi, delegasi berorientasi objek dan jenis aman.

Misalnya, lihat Keterangan API Tambahan untuk System.Delegate.CreateDelegate.

Konstruktor

Delegate(Object, String)

Menginisialisasi delegasi yang memanggil metode instans yang ditentukan pada instans kelas yang ditentukan.

Delegate(Type, String)

Menginisialisasi delegasi yang memanggil metode statis yang ditentukan dari kelas yang ditentukan.

Properti

HasSingleTarget

Mewakili delegasi, yang merupakan struktur data yang mengacu pada metode statis atau ke instans kelas dan metode instans kelas tersebut.

Method

Mendapatkan metode yang diwakili oleh delegasi.

Target

Mendapatkan instans kelas tempat delegasi saat ini memanggil metode instans.

Metode

Clone()

Membuat salinan delegasi yang dangkal.

Combine(Delegate, Delegate)

Menggabungkan daftar pemanggilan dua delegasi.

Combine(Delegate[])

Menggabungkan daftar pemanggilan array delegasi.

CombineImpl(Delegate)

Menggabungkan daftar pemanggilan delegasi multicast (dapat digabungkan) yang ditentukan dan delegasi multicast saat ini (dapat dikombinasikan).

CreateDelegate(Type, MethodInfo)

Membuat delegasi dari jenis yang ditentukan untuk mewakili metode yang ditentukan.

CreateDelegate(Type, MethodInfo, Boolean)

Membuat delegasi jenis yang ditentukan untuk mewakili metode statis yang ditentukan, dengan perilaku yang ditentukan tentang kegagalan untuk mengikat.

CreateDelegate(Type, Object, MethodInfo)

Membuat delegasi dari jenis yang ditentukan yang mewakili metode statis atau instans yang ditentukan, dengan argumen pertama yang ditentukan.

CreateDelegate(Type, Object, MethodInfo, Boolean)

Membuat delegasi jenis yang ditentukan yang mewakili metode statis atau instans yang ditentukan, dengan argumen pertama yang ditentukan dan perilaku yang ditentukan tentang kegagalan untuk mengikat.

CreateDelegate(Type, Object, String)

Membuat delegasi dari jenis yang ditentukan yang mewakili metode instans yang ditentukan untuk dipanggil pada instans kelas yang ditentukan.

CreateDelegate(Type, Object, String, Boolean)

Membuat delegasi dari jenis yang ditentukan yang mewakili metode instans yang ditentukan untuk dipanggil pada instans kelas yang ditentukan dengan sensitivitas huruf besar/kecil yang ditentukan.

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

Membuat delegasi jenis yang ditentukan yang mewakili metode instans yang ditentukan untuk dipanggil pada instans kelas yang ditentukan, dengan sensitivitas huruf besar/kecil yang ditentukan dan perilaku yang ditentukan pada kegagalan untuk mengikat.

CreateDelegate(Type, Type, String)

Membuat delegasi dari jenis yang ditentukan yang mewakili metode statis yang ditentukan dari kelas yang ditentukan.

CreateDelegate(Type, Type, String, Boolean)

Membuat delegasi dari jenis yang ditentukan yang mewakili metode statis yang ditentukan dari kelas yang ditentukan, dengan sensitivitas huruf besar/kecil yang ditentukan.

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

Membuat delegasi jenis yang ditentukan yang mewakili metode statis yang ditentukan dari kelas yang ditentukan, dengan sensitivitas huruf besar/kecil yang ditentukan dan perilaku yang ditentukan pada kegagalan untuk mengikat.

DynamicInvoke(Object[])

Secara dinamis memanggil (terlambat terikat) metode yang diwakili oleh delegasi saat ini.

DynamicInvokeImpl(Object[])

Secara dinamis memanggil (terlambat terikat) metode yang diwakili oleh delegasi saat ini.

EnumerateInvocationList<TDelegate>(TDelegate)

Mewakili delegasi, yang merupakan struktur data yang mengacu pada metode statis atau ke instans kelas dan metode instans kelas tersebut.

Equals(Object)

Menentukan apakah objek yang ditentukan dan delegasi saat ini memiliki jenis yang sama dan berbagi target, metode, dan daftar pemanggilan yang sama.

GetHashCode()

Mengembalikan kode hash untuk delegasi.

GetInvocationList()

Mengembalikan daftar pemanggilan delegasi.

GetMethodImpl()

Mendapatkan metode yang diwakili oleh delegasi saat ini.

GetObjectData(SerializationInfo, StreamingContext)
Kedaluwarsa.

Tidak didukung.

GetType()

Mendapatkan instans Type saat ini.

(Diperoleh dari Object)
MemberwiseClone()

Membuat salinan dangkal dari yang saat ini Object.

(Diperoleh dari Object)
Remove(Delegate, Delegate)

Menghapus kemunculan terakhir daftar pemanggilan delegasi dari daftar pemanggilan delegasi lain.

RemoveAll(Delegate, Delegate)

Menghapus semua kemunculan daftar pemanggilan delegasi dari daftar pemanggilan delegasi lain.

RemoveImpl(Delegate)

Menghapus daftar pemanggilan delegasi dari daftar pemanggilan delegasi lain.

ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Operator

Equality(Delegate, Delegate)

Menentukan apakah delegasi yang ditentukan sama.

Inequality(Delegate, Delegate)

Menentukan apakah delegasi yang ditentukan tidak sama.

Metode Ekstensi

GetMethodInfo(Delegate)

Mendapatkan objek yang mewakili metode yang diwakili oleh delegasi yang ditentukan.

Berlaku untuk

Lihat juga