Baca dalam bahasa Inggris

Bagikan melalui


Delegate Kelas

Definisi

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

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
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 kelas Delegate atau dari kelas MulticastDelegate. Juga tidak diizinkan untuk mendapatkan jenis baru dari jenis delegasi. Kelas Delegate tidak dianggap sebagai jenis delegasi; ini adalah kelas yang digunakan untuk mendelegasikan jenis.

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

Catatan

Runtime bahasa umum menyediakan metode Invoke 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 berguna dalam pantulan saat Anda ingin menemukan tanda tangan jenis delegasi.

Runtime bahasa umum menyediakan setiap jenis delegasi dengan metode BeginInvoke 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 this tersembunyi 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 atas argumen pertamanya.

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

Ketika delegasi mewakili metode instans yang ditutup selama 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 this tersembunyi dalam daftar parameter formalnya; dalam hal ini, delegasi tidak memiliki referensi ke objek target, dan objek target harus disediakan ketika delegasi dipanggil.

Ketika 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 tepat 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 mengembalikan null ketika hasil operasi adalah delegasi yang tidak mereferensikan setidaknya satu metode. Operasi penggambungan mengembalikan delegasi yang tidak berubah ketika operasi yang diminta tidak berpengaruh.

Catatan

Bahasa terkelola menggunakan metode Combine dan Remove untuk menerapkan operasi delegasi. Contohnya termasuk pernyataan AddHandler 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 Covariance dan Contravariance.

Catatan

Delegasi generik yang kompatibel dengan penugasan karena varians belum tentu dapat dikombinasikan. Agar dapat dikombinasikan, jenisnya harus sama persis. Misalnya, 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 cocok dengan 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.

Ketika 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

Mendapatkan nilai yang menunjukkan apakah Delegate memiliki satu target pemanggilan.

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.

Combine(ReadOnlySpan<Delegate>)

Menggabungkan daftar pemanggilan rentang delegasi.

CombineImpl(Delegate)

Menggabungkan daftar pemanggilan delegasi multicast (dapat dikombinasikan) 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 dari 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 dari 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 jenis yang ditentukan yang mewakili metode instans yang ditentukan untuk dipanggil pada instans kelas yang ditentukan.

CreateDelegate(Type, Object, String, 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.

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 kasus yang ditentukan dan perilaku yang ditentukan tentang 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 dari jenis yang ditentukan yang mewakili metode statis yang ditentukan dari kelas yang ditentukan, dengan sensitivitas huruf besar/kecil yang ditentukan dan perilaku yang ditentukan tentang kegagalan untuk mengikat.

DynamicInvoke(Object[])

Memanggil secara dinamis (terlambat terikat) metode yang diwakili oleh delegasi saat ini.

DynamicInvokeImpl(Object[])

Memanggil secara dinamis (terlambat terikat) metode yang diwakili oleh delegasi saat ini.

EnumerateInvocationList<TDelegate>(TDelegate)

Mendapatkan enumerator untuk target pemanggilan delegasi ini.

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 Type instans saat ini.

(Diperoleh dari Object)
MemberwiseClone()

Membuat salinan dangkal dari Objectsaat ini.

(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

Produk Versi
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Lihat juga