Delegate Osztály

Definíció

Egy delegáltat jelöl, amely egy statikus metódusra vagy egy osztálypéldányra és az osztály példánymetódusára hivatkozó adatstruktúra.

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
Öröklődés
Delegate
Származtatott
Attribútumok
Megvalósítás

Megjegyzések

Az Delegate osztály a delegálttípusok alaposztálya. Azonban csak a rendszer és a fordítók származhatnak explicit módon az osztályból vagy az DelegateMulticastDelegate osztályból. Delegált típusból nem lehet új típust levezetni. Az Delegate osztály nem tekinthető delegált típusnak, hanem a delegálttípusok származtatására használt osztály.

A legtöbb nyelv implementál egy kulcsszót delegate , és az adott nyelvek fordítói képesek az MulticastDelegate osztályból származni, ezért a felhasználóknak a delegate nyelv által biztosított kulcsszót kell használniuk.

Note

A közös nyelvi futtatókörnyezet minden delegálttípushoz biztosít egy metódust Invoke , ugyanazzal az aláírással, mint a meghatalmazott. Nem kell explicit módon meghívnia ezt a metódust a C#-ból vagy Visual Basic, mert a fordítók automatikusan meghívják. A Invoke metódus akkor hasznos , ha meg szeretné keresni a delegált típus aláírását.

A közös nyelvi futtatókörnyezet minden delegálttípust BeginInvoke és EndInvoke metódust biztosít a meghatalmazott aszinkron meghívásának engedélyezéséhez. További információ ezekről a metódusokról: Szinkron metódusok aszinkron meghívása.

A delegált típusú deklaráció egy olyan szerződést hoz létre, amely egy vagy több metódus aláírását határozza meg. A meghatalmazott egy meghatalmazotttípus egy példánya, amely a következőre hivatkozik:

  • Egy típus példánymetódusa és az adott típushoz hozzárendelhető célobjektum.
  • Egy típus példánymetódusa, amelynek rejtett this paramétere megjelenik a formális paraméterlistában. A meghatalmazottról azt mondják, hogy egy nyílt példány meghatalmazottja.
  • Statikus módszer.
  • A metódus első paraméteréhez hozzárendelhető statikus és célobjektum. A meghatalmazott az első argumentuma miatt zárva lesz.

A delegált kötésről további információt a metódus túlterhelésével CreateDelegate(Type, Object, MethodInfo, Boolean) kapcsolatban talál.

Ha egy meghatalmazott az első argumentuma (a leggyakoribb eset) során bezárt példánymetódust jelöl, a delegált egy hivatkozást tárol a metódus belépési pontjára és egy objektumra mutató hivatkozást, amelyet célnak neveznek, amely a metódust definiáló típushoz rendelhető. Amikor egy meghatalmazott egy nyitott példány metódusát jelöli, a metódus belépési pontjára mutató hivatkozást tárol. A meghatalmazotti aláírásnak tartalmaznia kell a rejtett this paramétert a hivatalos paraméterlistájában; ebben az esetben a meghatalmazott nem hivatkozik célobjektumra, és a meghatalmazott meghívásakor meg kell adnia egy célobjektumot.

Ha egy meghatalmazott statikus metódust jelöl, a meghatalmazott a metódus belépési pontjára mutató hivatkozást tárol. Ha egy delegált egy statikus metódust jelöl, amely az első argumentuma alatt van lezárva, a delegált a metódus belépési pontjára mutató hivatkozást és a metódus első argumentumának típusához hozzárendelhető célobjektumra mutató hivatkozást tárol. A meghatalmazott meghívásakor a statikus metódus első argumentuma megkapja a célobjektumot. Ennek az első argumentumnak referenciatípusnak kell lennie.

A meghatalmazottak meghívási listája a meghatalmazottak rendezett halmaza, amelyben a lista minden eleme pontosan az egyik metódust hívja meg, amelyet a meghatalmazott képvisel. A meghívási listák ismétlődő metódusokat tartalmazhatnak. A meghívás során a metódusok abban a sorrendben lesznek meghívva, amelyben megjelennek a meghívási listában. A meghatalmazott megkísérli meghívni az összes metódust a híváslistájában; az ismétlődő elemeket a rendszer minden alkalommal egyszer meghívja, amikor megjelennek a meghívási listában. A meghatalmazottak nem módosíthatók; létrehozása után a meghatalmazott meghívási listája nem változik.

A meghatalmazottakat csoportos küldésnek vagy kombinálhatónak nevezzük, mivel a meghatalmazottak meghívhatnak egy vagy több metódust, és használhatók a műveletek kombinálásához.

Az olyan műveletek kombinálása, mint például Combine az és Remove, nem módosítják a meglévő meghatalmazottakat. Ehelyett egy ilyen művelet egy új meghatalmazottat ad vissza, amely tartalmazza a művelet eredményeit, egy változatlan meghatalmazottat vagy null. Az egyesítő művelet akkor ad null vissza eredményt, ha a művelet eredménye olyan meghatalmazott, amely nem hivatkozik legalább egy metódusra. Az egyesítő művelet változatlan meghatalmazottat ad vissza, ha a kért műveletnek nincs hatása.

Note

A felügyelt nyelvek a delegálási műveletek implementálásához használják a metódusokat és Combine a Remove metódusokat. Ilyenek például a AddHandler és RemoveHandler utasítások a Visual Basic és a += és -= operátorok a delegált típusok C#-ban.

Az általános delegálási típusok variánstípus-paraméterekkel is rendelkezhetnek. A contravariant típusú paraméterek használhatók a delegált paramétertípusaként, a kovariant típusú paraméter pedig visszatérési típusként. Ez a funkció lehetővé teszi, hogy az azonos általános típusdefinícióból létrehozott általános delegálási típusok hozzárendelés-kompatibilisek legyenek, ha a típusargumentumok öröklési kapcsolattal rendelkező referenciatípusok, ahogyan azt a Kovariancia és a Contravariance is ismerteti.

Note

A variancia miatt hozzárendeléssel kompatibilis általános meghatalmazottak nem feltétlenül kombinálhatók. Ahhoz, hogy kombinálható legyen, a típusoknak pontosan meg kell egyeznie. Tegyük fel például, hogy egy elnevezett Derived osztály egy nevesített Baseosztályból származik. A Action<Base> (Action(Of Base) Visual Basic) típusú meghatalmazott Action<Derived> típusú változóhoz rendelhető, de a két meghatalmazott nem kombinálható, mert a típusok nem felelnek meg pontosan.

Ha egy meghívott metódus kivételt jelez, a metódus leáll, a kivétel visszakerül a meghatalmazott hívójának, és a meghívási listában szereplő többi metódus nem lesz meghívva. A hívó kivételének észlelése nem módosítja ezt a viselkedést.

Ha a meghatalmazott által meghívott metódusok aláírása tartalmaz egy visszatérési értéket, a meghatalmazott a meghívási lista utolsó elemének visszatérési értékét adja vissza. Ha az aláírás tartalmaz egy hivatkozással átadott paramétert, a paraméter végső értéke a meghívási listában szereplő összes metódus eredménye, amely egymás után hajtja végre és frissíti a paraméter értékét.

A C delegált legközelebbi megfelelője egy függvénymutató. A meghatalmazottak statikus vagy példánymetódusokat is képviselhetnek. Amikor a meghatalmazott egy példánymetódust jelöl, a meghatalmazott nem csak a metódus belépési pontjára mutató hivatkozást, hanem az osztálypéldányra mutató hivatkozást is tárol. A függvénymutatókkal ellentétben a meghatalmazottak objektumorientáltak és biztonságosak.

Ilyenek például a System.Delegate.CreateDelegate kiegészítő API-megjegyzései.

Konstruktorok

Name Description
Delegate(Object, String)

Inicializál egy meghatalmazottat, aki meghívja a megadott példány metódusát a megadott osztálypéldányon.

Delegate(Type, String)

Inicializál egy meghatalmazottat, aki meghívja a megadott statikus metódust a megadott osztályból.

Tulajdonságok

Name Description
HasSingleTarget

Egy olyan értéket kap, amely jelzi, hogy a Delegate hívási cél egyetlen-e.

Method

Lekéri a meghatalmazott által képviselt metódust.

Target

Lekéri azt az osztálypéldányt, amelyre az aktuális meghatalmazott meghívja a példánymetódust.

Metódusok

Name Description
Clone()

Létrehozza a meghatalmazott sekély másolatát.

Combine(Delegate, Delegate)

Összefűzi két meghatalmazott meghívási listáját.

Combine(Delegate[])

Összefűzi a meghatalmazottak tömbjének meghívási listáit.

Combine(ReadOnlySpan<Delegate>)

Összefűzi a meghatalmazottak egy tartományának meghívási listáit.

CombineImpl(Delegate)

Összefűzi a megadott csoportos küldésű (kombinálható) delegált és az aktuális csoportos küldésű (kombinálható) delegált meghívási listáit.

CreateDelegate(Type, MethodInfo, Boolean)

Létrehoz egy megadott típusú delegáltat, amely a megadott statikus metódust képviseli, a kötés meghiúsulása esetén a megadott viselkedéssel.

CreateDelegate(Type, MethodInfo)

Létrehoz egy megadott típusú delegáltat, amely a megadott metódust képviseli.

CreateDelegate(Type, Object, MethodInfo, Boolean)

Létrehoz egy megadott típusú delegáltat, amely a megadott statikus vagy példánymetódusnak felel meg, a megadott első argumentummal és a kötés meghiúsulásának megadott viselkedésével.

CreateDelegate(Type, Object, MethodInfo)

Létrehoz egy megadott típusú delegáltat, amely a megadott statikus vagy példánymetódusnak felel meg a megadott első argumentummal.

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

Létrehoz egy megadott típusú delegáltat, amely a megadott osztálypéldányon meghívandó adott példánymetódust jelöli, a megadott kis- és nagybetűk érzékenységével és a kötés meghiúsulásával kapcsolatos megadott viselkedéssel.

CreateDelegate(Type, Object, String, Boolean)

Létrehoz egy megadott típusú delegáltat, amely a megadott osztálypéldányon meghívandó, a megadott kis- és nagybetűkre vonatkozó metódust jelöli.

CreateDelegate(Type, Object, String)

Létrehoz egy megadott típusú delegáltat, amely a megadott osztálypéldányon meghívandó megadott példánymetódust jelöli.

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

Létrehoz egy megadott típusú delegáltat, amely a megadott osztály megadott statikus metódusát képviseli, a megadott kis- és nagybetűk érzékenységével és a kötés meghiúsulásának megadott viselkedésével.

CreateDelegate(Type, Type, String, Boolean)

Létrehoz egy megadott típusú delegáltat, amely a megadott osztály megadott statikus metódusát képviseli a megadott kis- és nagybetűk érzékenységével.

CreateDelegate(Type, Type, String)

Létrehoz egy megadott típusú delegáltat, amely a megadott osztály megadott statikus metódusát jelöli.

DynamicInvoke(Object[])

Dinamikusan meghívja (későn kötött) az aktuális meghatalmazott által képviselt metódust.

DynamicInvokeImpl(Object[])

Dinamikusan meghívja (későn kötött) az aktuális meghatalmazott által képviselt metódust.

EnumerateInvocationList<TDelegate>(TDelegate)

Enumerátort kap a meghatalmazott meghívási céljaihoz.

Equals(Object)

Meghatározza, hogy a megadott objektum és az aktuális delegált azonos típusú-e, és ugyanazokkal a célokkal, metódusokkal és meghívási listával rendelkezik-e.

GetHashCode()

A meghatalmazott kivonatkódját adja vissza.

GetInvocationList()

A meghatalmazott meghívási listáját adja vissza.

GetMethodImpl()

Lekéri az aktuális meghatalmazott által képviselt metódust.

GetObjectData(SerializationInfo, StreamingContext)
Elavult.

Nem támogatott.

GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
Remove(Delegate, Delegate)

Eltávolítja egy meghatalmazott meghívási listájának utolsó előfordulását egy másik meghatalmazott meghívási listájából.

RemoveAll(Delegate, Delegate)

Eltávolítja a meghatalmazott meghívási listájának összes előfordulását egy másik meghatalmazott meghívási listájából.

RemoveImpl(Delegate)

Eltávolítja egy meghatalmazott meghívási listáját egy másik meghatalmazott meghívási listájából.

ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)

Operátorok

Name Description
Equality(Delegate, Delegate)

Meghatározza, hogy a megadott meghatalmazottak egyenlőek-e.

Inequality(Delegate, Delegate)

Meghatározza, hogy a megadott meghatalmazottak nem egyenlők-e.

Bővítő metódusok

Name Description
GetMethodInfo(Delegate)

Lekéri a megadott meghatalmazott által képviselt metódust képviselő objektumot.

A következőre érvényes:

Lásd még