Delegate Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Vertegenwoordigt een gemachtigde, een gegevensstructuur die verwijst naar een statische methode of naar een klasse-exemplaar en een instantiemethode van die klasse.
public ref class Delegate abstract
public ref class Delegate abstract : ICloneable, System::Runtime::Serialization::ISerializable
public abstract class Delegate
[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
public abstract class Delegate : ICloneable, System.Runtime.Serialization.ISerializable
type Delegate = class
[<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
type Delegate = class
interface ICloneable
interface ISerializable
Public MustInherit Class Delegate
Public MustInherit Class Delegate
Implements ICloneable, ISerializable
- Overname
-
Delegate
- Afgeleid
- Kenmerken
- Implementeringen
Opmerkingen
De Delegate klasse is de basisklasse voor gemachtigde typen. Alleen het systeem en de compilers kunnen echter expliciet worden afgeleid van de Delegate klasse of van de MulticastDelegate klasse. Het is ook niet toegestaan om een nieuw type af te leiden van een gemachtigde. De klasse wordt niet beschouwd als een gemachtigdentype. Het Delegate is een klasse die wordt gebruikt om gedelegeerdentypen af te leiden.
De meeste talen implementeren een delegate trefwoord en compilers voor deze talen kunnen worden afgeleid van de MulticastDelegate klasse. Daarom moeten gebruikers het delegate trefwoord gebruiken dat door de taal wordt geleverd.
Note
De algemene taalruntime biedt een Invoke methode voor elk type gemachtigde, met dezelfde handtekening als de gemachtigde. U hoeft deze methode niet expliciet aan te roepen vanuit C# of Visual Basic omdat de compilers deze automatisch aanroepen. De Invoke methode is handig bij reflectie wanneer u de handtekening van het type gedelegeerde wilt vinden.
De algemene taalruntime biedt elk type gedelegeerde met BeginInvoke en EndInvoke methoden om asynchrone aanroep van de gemachtigde in te schakelen. Zie Synchrone methoden asynchroon aanroepen voor meer informatie over deze methoden.
Met de declaratie van een gemachtigdentype wordt een contract gemaakt dat de handtekening van een of meer methoden aangeeft. Een gemachtigde is een instantie van een gemachtigde die verwijst naar:
- Een exemplaarmethode van een type en een doelobject dat aan dat type kan worden toegewezen.
- Een exemplaarmethode van een type, waarbij de verborgen
thisparameter wordt weergegeven in de formele parameterlijst. De gemachtigde wordt gezegd een gemachtigde van het open exemplaar te zijn. - Een statische methode.
- Een statische methode en een doelobject dat kan worden toegewezen aan de eerste parameter van de methode. De gemachtigde wordt gezegd dat deze wordt gesloten over het eerste argument.
Zie de overbelasting van de CreateDelegate(Type, Object, MethodInfo, Boolean) methode voor meer informatie over gedelegeerde binding.
Wanneer een gemachtigde een instantiemethode vertegenwoordigt die is gesloten over het eerste argument (het meest voorkomende geval), slaat de gedelegeerde een verwijzing op naar het ingangspunt van de methode en een verwijzing naar een object, het doel genoemd. Dit is een type dat kan worden toegewezen aan het type dat de methode heeft gedefinieerd. Wanneer een gemachtigde een open exemplaarmethode vertegenwoordigt, wordt een verwijzing naar het toegangspunt van de methode opgeslagen. De handtekening van de gemachtigde moet de verborgen this parameter bevatten in de formele parameterlijst. In dit geval heeft de gedelegeerde geen verwijzing naar een doelobject en moet een doelobject worden opgegeven wanneer de gemachtigde wordt aangeroepen.
Wanneer een gemachtigde een statische methode vertegenwoordigt, slaat de gedelegeerde een verwijzing op naar het toegangspunt van de methode. Wanneer een gemachtigde een statische methode vertegenwoordigt die is gesloten over het eerste argument, slaat de gedelegeerde een verwijzing op naar het toegangspunt van de methode en een verwijzing naar een doelobject dat kan worden toegewezen aan het type van het eerste argument van de methode. Wanneer de gemachtigde wordt aangeroepen, ontvangt het eerste argument van de statische methode het doelobject. Dit eerste argument moet een verwijzingstype zijn.
De aanroeplijst van een gemachtigde is een geordende set gedelegeerden waarin elk element van de lijst precies een van de methoden aanroept die door de gemachtigde worden vertegenwoordigd. Een aanroeplijst kan dubbele methoden bevatten. Tijdens een aanroep worden methoden aangeroepen in de volgorde waarin ze worden weergegeven in de aanroeplijst. Een gemachtigde probeert elke methode in de aanroeplijst aan te roepen; duplicaten worden eenmaal aangeroepen voor elke keer dat ze worden weergegeven in de aanroeplijst. Gemachtigden zijn onveranderbaar; zodra deze is gemaakt, verandert de aanroeplijst van een gemachtigde niet.
Gemachtigden worden multicast of combinatiebaar genoemd, omdat een gemachtigde een of meer methoden kan aanroepen en kan worden gebruikt bij het combineren van bewerkingen.
Het combineren van bewerkingen, zoals Combine en Remove, wijzigen bestaande gemachtigden niet. In plaats daarvan retourneert een dergelijke bewerking een nieuwe gemachtigde die de resultaten van de bewerking, een ongewijzigde gemachtigde of null. Een combinatiebewerking wordt geretourneerd null wanneer het resultaat van de bewerking een gemachtigde is die niet naar ten minste één methode verwijst. Een combinatiebewerking retourneert een ongewijzigde gemachtigde wanneer de aangevraagde bewerking geen effect heeft.
Note
Beheerde talen gebruiken de Combine en Remove methoden om gedelegeerde bewerkingen te implementeren. Voorbeelden hiervan zijn de instructies AddHandler en RemoveHandler in Visual Basic en de operators += en -= voor gemachtigden in C#.
Algemene gemachtigdentypen kunnen varianttypeparameters hebben. Contravarianttypeparameters kunnen worden gebruikt als parametertypen van de gemachtigde en een covarianttypeparameter kan worden gebruikt als het retourtype. Met deze functie kunnen algemene gedelegeerde typen die zijn samengesteld op basis van dezelfde algemene typedefinitie compatibel zijn als hun typeargumenten verwijzingstypen zijn met een overnamerelatie, zoals wordt uitgelegd in Covariantie en Contravariantie.
Note
Algemene gemachtigden die compatibel zijn met toewijzingen vanwege afwijkingen, kunnen niet noodzakelijkerwijs worden gecombineerd. Om te kunnen worden gecombineerd, moeten de typen exact overeenkomen. Stel dat een klasse met de naam Derived is afgeleid van een klasse met de naam Base. Een gemachtigde van het type Action<Base> (Action(Of Base) in Visual Basic) kan worden toegewezen aan een variabele van het type Action<Derived>, maar de twee gemachtigden kunnen niet worden gecombineerd omdat de typen niet exact overeenkomen.
Als een aangeroepen methode een uitzondering genereert, wordt de methode gestopt met uitvoeren, wordt de uitzondering teruggegeven aan de aanroeper van de gemachtigde en worden de resterende methoden in de aanroeplijst niet aangeroepen. Als u de uitzondering in de aanroeper ondervangt, verandert dit gedrag niet.
Wanneer de handtekening van de methoden die door een gemachtigde worden aangeroepen een retourwaarde bevat, retourneert de gedelegeerde de retourwaarde van het laatste element in de aanroeplijst. Wanneer de handtekening een parameter bevat die doorverwijzing wordt doorgegeven, is de uiteindelijke waarde van de parameter het resultaat van elke methode in de aanroeplijst die opeenvolgend wordt uitgevoerd en de waarde van de parameter wordt bijgewerkt.
Het dichtstbijzijnde equivalent van een gemachtigde in C is een functiepointer. Een gemachtigde kan een statische methode of een instantiemethode vertegenwoordigen. Wanneer de gemachtigde een instantiemethode vertegenwoordigt, slaat de gedelegeerde niet alleen een verwijzing op naar het toegangspunt van de methode, maar ook naar het klasse-exemplaar. In tegenstelling tot functiepointers zijn gemachtigden objectgeoriënteerd en typen ze veilig.
Zie aanvullende API-opmerkingen voor System.Delegate.CreateDelegate voor voorbeelden.
Constructors
| Name | Description |
|---|---|
| Delegate(Object, String) |
Initialiseert een gemachtigde die de opgegeven instantiemethode aanroept op het opgegeven klasse-exemplaar. |
| Delegate(Type, String) |
Initialiseert een gemachtigde die de opgegeven statische methode aanroept vanuit de opgegeven klasse. |
Eigenschappen
| Name | Description |
|---|---|
| Method |
Hiermee haalt u de methode op die wordt vertegenwoordigd door de gemachtigde. |
| Target |
Hiermee haalt u het klasse-exemplaar op waarop de huidige gemachtigde de instantiemethode aanroept. |
Methoden
| Name | Description |
|---|---|
| Clone() |
Hiermee maakt u een ondiepe kopie van de gemachtigde. |
| Combine(Delegate, Delegate) |
Voegt de aanroeplijsten van twee gemachtigden samen. |
| Combine(Delegate[]) |
Voegt de aanroeplijsten samen van een matrix met gemachtigden. |
| CombineImpl(Delegate) |
Hiermee voegt u de aanroeplijsten van de opgegeven multicast -gemachtigde (combinable) en de huidige multicast -gemachtigde (combinable) samen. |
| CreateDelegate(Type, MethodInfo, Boolean) |
Hiermee maakt u een gemachtigde van het opgegeven type om de opgegeven statische methode weer te geven, met het opgegeven gedrag bij het niet binden. |
| CreateDelegate(Type, MethodInfo) |
Hiermee maakt u een gemachtigde van het opgegeven type die de opgegeven methode vertegenwoordigt. |
| CreateDelegate(Type, Object, MethodInfo, Boolean) |
Hiermee maakt u een gemachtigde van het opgegeven type dat de opgegeven statische of instantiemethode vertegenwoordigt, met het opgegeven eerste argument en het opgegeven gedrag bij het niet binden. |
| CreateDelegate(Type, Object, MethodInfo) |
Hiermee maakt u een gemachtigde van het opgegeven type dat de opgegeven statische of instantiemethode vertegenwoordigt, met het opgegeven eerste argument. |
| CreateDelegate(Type, Object, String, Boolean, Boolean) |
Hiermee maakt u een gemachtigde van het opgegeven type dat de opgegeven instantiemethode vertegenwoordigt die moet worden aangeroepen op het opgegeven klasse-exemplaar, met de opgegeven hoofdlettergevoeligheid en het opgegeven gedrag bij het niet binden. |
| CreateDelegate(Type, Object, String, Boolean) |
Hiermee maakt u een gemachtigde van het opgegeven type dat de opgegeven instantiemethode vertegenwoordigt die moet worden aangeroepen op het opgegeven klasse-exemplaar met de opgegeven hoofdlettergevoeligheid. |
| CreateDelegate(Type, Object, String) |
Hiermee maakt u een gemachtigde van het opgegeven type dat de opgegeven instantiemethode vertegenwoordigt die moet worden aangeroepen op het opgegeven klasse-exemplaar. |
| CreateDelegate(Type, Type, String, Boolean, Boolean) |
Hiermee maakt u een gemachtigde van het opgegeven type dat de opgegeven statische methode van de opgegeven klasse vertegenwoordigt, met de opgegeven hoofdlettergevoeligheid en het opgegeven gedrag bij het niet binden. |
| CreateDelegate(Type, Type, String, Boolean) |
Hiermee maakt u een gemachtigde van het opgegeven type dat de opgegeven statische methode van de opgegeven klasse vertegenwoordigt, met de opgegeven hoofdlettergevoeligheid. |
| CreateDelegate(Type, Type, String) |
Hiermee maakt u een gemachtigde van het opgegeven type dat de opgegeven statische methode van de opgegeven klasse vertegenwoordigt. |
| DynamicInvoke(Object[]) |
Roept dynamisch de methode aan (laat gebonden) die wordt vertegenwoordigd door de huidige gemachtigde. |
| DynamicInvokeImpl(Object[]) |
Roept dynamisch de methode aan (laat gebonden) die wordt vertegenwoordigd door de huidige gemachtigde. |
| Equals(Object) |
Bepaalt of het opgegeven object en de huidige gemachtigde van hetzelfde type zijn en dezelfde doelen, methoden en aanroeplijst delen. |
| GetHashCode() |
Retourneert een hash-code voor de gemachtigde. |
| GetInvocationList() |
Retourneert de aanroeplijst van de gemachtigde. |
| GetMethodImpl() |
Hiermee haalt u de methode op die wordt vertegenwoordigd door de huidige gemachtigde. |
| GetObjectData(SerializationInfo, StreamingContext) |
Wordt niet ondersteund. |
| GetType() |
Hiermee haalt u de Type huidige instantie op. (Overgenomen van Object) |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| Remove(Delegate, Delegate) |
Hiermee verwijdert u het laatste exemplaar van de aanroeplijst van een gemachtigde uit de lijst met aanroepen van een andere gemachtigde. |
| RemoveAll(Delegate, Delegate) |
Hiermee verwijdert u alle exemplaren van de aanroeplijst van een gemachtigde uit de lijst met aanroepen van een andere gemachtigde. |
| RemoveImpl(Delegate) |
Hiermee verwijdert u de aanroeplijst van een gemachtigde uit de aanroeplijst van een andere gemachtigde. |
| ToString() |
Retourneert een tekenreeks die het huidige object vertegenwoordigt. (Overgenomen van Object) |
Operators
| Name | Description |
|---|---|
| Equality(Delegate, Delegate) |
Bepaalt of de opgegeven gemachtigden gelijk zijn. |
| Inequality(Delegate, Delegate) |
Bepaalt of de opgegeven gemachtigden niet gelijk zijn. |
Extensiemethoden
| Name | Description |
|---|---|
| GetMethodInfo(Delegate) |
Hiermee haalt u een object op dat de methode vertegenwoordigt die wordt vertegenwoordigd door de opgegeven gemachtigde. |