Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen.
Übersetzung
Original
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

DynamicObject-Klasse

Stellt eine Basisklasse zum Angeben von dynamischen Verhalten zur Laufzeit bereit. Aus dieser Klasse muss geerbt werden, und sie kann nicht direkt instanziiert werden.

System.Object
  System.Dynamic.DynamicObject
    System.Windows.Interop.DynamicScriptObject

Namespace:  System.Dynamic
Assembly:  System.Core (in System.Core.dll)
public class DynamicObject : IDynamicMetaObjectProvider

Der DynamicObject-Typ macht die folgenden Member verfügbar.

  Name Beschreibung
Geschützte Methode DynamicObject Ermöglicht es abgeleiteten Typen, eine neue Instanz des DynamicObject-Typs zu initialisieren.
Zum Seitenanfang
  Name Beschreibung
Öffentliche Methode Equals(Object) Bestimmt, ob das angegebene Object und das aktuelle Object gleich sind. (Von Object geerbt.)
Geschützte Methode Finalize Gibt einem Objekt Gelegenheit zu dem Versuch, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der automatische Speicherbereinigung freigegeben wird. (Von Object geerbt.)
Öffentliche Methode GetDynamicMemberNames Gibt die Enumeration aller dynamischen Membernamen zurück.
Öffentliche Methode GetHashCode Fungiert als Hashfunktion für einen bestimmten Typ. (Von Object geerbt.)
Öffentliche Methode GetMetaObject Stellt ein DynamicMetaObject bereit, das an die dynamischen virtuellen Methoden sendet. Das Objekt kann in einem anderen DynamicMetaObject gekapselt werden, um benutzerdefiniertes Verhalten für einzelne Aktionen bereitzustellen. Diese Methode unterstützt die Dynamic Language Runtime-Infrastruktur für Sprachimplementierungen und ist nicht für die direkte Verwendung im Code vorgesehen.
Öffentliche Methode GetType Ruft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Geschützte Methode MemberwiseClone Erstellt eine flache Kopie des aktuellen Object. (Von Object geerbt.)
Öffentliche Methode ToString Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Von Object geerbt.)
Öffentliche Methode TryBinaryOperation Stellt die Implementierung für binäre Operationen bereit. Von der DynamicObject-Klasse abgeleitete Klassen können diese Methode überschreiben, um dynamisches Verhalten für Operationen wie Addition oder Multiplikation anzugeben.
Öffentliche Methode TryConvert Stellt die Implementierung für Typkonvertierungsvorgänge bereit. Von der DynamicObject-Klasse abgeleitete Klassen können diese Methode überschreiben, um dynamisches Verhalten für Operationen anzugeben, die ein Objekt von einem Typ in einen anderen konvertieren.
Öffentliche Methode TryCreateInstance Stellt die Implementierung für Vorgänge bereit, die eine neue Instanz eines dynamischen Objekts initialisieren. Diese Methode ist nicht zur Verwendung in C# oder Visual Basic vorgesehen.
Öffentliche Methode TryDeleteIndex Stellt die Implementierung für Vorgänge bereit, die ein Objekt nach Index löschen. Diese Methode ist nicht zur Verwendung in C# oder Visual Basic vorgesehen.
Öffentliche Methode TryDeleteMember Stellt die Implementierung für Vorgänge bereit, die einen Objektmember löschen. Diese Methode ist nicht zur Verwendung in C# oder Visual Basic vorgesehen.
Öffentliche Methode TryGetIndex Stellt die Implementierung für Vorgänge bereit, die einen Wert nach Index abrufen. Von der DynamicObject-Klasse abgeleitete Klassen können diese Methode überschreiben, um dynamisches Verhalten für Indexvorgänge anzugeben.
Öffentliche Methode TryGetMember Stellt die Implementierung für Vorgänge bereit, die Memberwerte abrufen. Von der DynamicObject-Klasse abgeleitete Klassen können diese Methode überschreiben, um dynamisches Verhalten für Vorgänge wie das Abrufen eines Werts für eine Eigenschaft anzugeben.
Öffentliche Methode TryInvoke Stellt die Implementierung für Vorgänge bereit, die ein Objekt aufrufen. Von der DynamicObject-Klasse abgeleitete Klassen können diese Methode überschreiben, um dynamisches Verhalten für Vorgänge wie das Aufrufen eines Objekts oder Delegaten anzugeben.
Öffentliche Methode TryInvokeMember Stellt die Implementierung für Vorgänge bereit, die einen Member aufrufen. Von der DynamicObject-Klasse abgeleitete Klassen können diese Methode überschreiben, um dynamisches Verhalten für Vorgänge wie das Aufrufen einer Methode anzugeben.
Öffentliche Methode TrySetIndex Stellt die Implementierung für Vorgänge bereit, die einen Wert nach Index festlegen. Von der DynamicObject-Klasse abgeleitete Klassen können diese Methode überschreiben, um dynamisches Verhalten für Vorgänge anzugeben, die auf Objekte mit einem angegebenen Index zugreifen.
Öffentliche Methode TrySetMember Stellt die Implementierung für Vorgänge bereit, die Memberwerte festlegen. Von der DynamicObject-Klasse abgeleitete Klassen können diese Methode überschreiben, um dynamisches Verhalten für Vorgänge wie das Festlegen eines Werts für eine Eigenschaft anzugeben.
Öffentliche Methode TryUnaryOperation Stellt die Implementierung für unäre Operationen bereit. Von der DynamicObject-Klasse abgeleitete Klassen können diese Methode überschreiben, um dynamisches Verhalten für Vorgänge wie Negation, Inkrement oder Dekrement anzugeben.
Zum Seitenanfang

Die DynamicObject-Klasse ermöglicht es Ihnen zu definieren, welche Operationen für dynamische Objekte ausgeführt werden können, und wie solche Operationen ausgeführt werden. Sie können z. B. definieren, was geschieht, wenn Sie versuchen, eine Objekteigenschaft abzurufen oder festzulegen, eine Methode aufzurufen oder mathematische Standardoperationen, z. B. Addition und Multiplikation, ausführen.

Diese Klasse kann nützlich sein, wenn Sie für eine Bibliothek ein zweckmäßigeres Protokoll erstellen möchten. Wenn Benutzer der Bibliothek z. B. Syntax wie Scriptobj.SetProperty("Count", 1) verwenden müssen, können Sie die Möglichkeit bieten, viel einfachere Syntax zu verwenden, etwa scriptobj.Count = 1.

Sie können eine Instanz der DynamicObject-Klasse nicht direkt erstellen. Um das dynamische Verhalten zu implementieren, können Sie von der DynamicObject-Klasse erben und notwendige Methoden überschreiben. Wenn Sie z. B. nur Operationen zum Festlegen und Abrufen von Eigenschaften benötigen, können Sie einfach die Methoden TrySetMember und TryGetMember überschreiben.

Um in C# das dynamische Verhalten für Instanzen von Klassen zu aktivieren, die von der DynamicObject-Klasse abgeleitet werden, müssen Sie das dynamic-Schlüsselwort verwenden. Weitere Informationen finden Sie unter Verwenden des Typs dynamic (C#-Programmierhandbuch).

In Visual Basic werden dynamische Vorgänge durch späte Bindung unterstützt. Weitere Informationen finden Sie unter Frühes und spätes Binden (Visual Basic).

Im folgenden Codebeispiel wird das Erstellen der Instanz einer von der DynamicObject-Klasse abgeleiteten Klasse veranschaulicht.

public class SampleDynamicObject : DynamicObject {}
//...
dynamic sampleObject = new SampleDynamicObject ();

Sie können von der DynamicObject-Klasse abgeleiteten Klassen auch eigene Member hinzufügen. Wenn die Klasse Eigenschaften definiert und auch die TrySetMember-Methode überschreibt, sucht die Dynamic Language Runtime (DLR) sucht zuerst mithilfe des Sprachenbinders nach einer statischen Definition einer Eigenschaft in der Klasse. Wen keine solche Eigenschaft vorhanden ist, ruft die DLR die TrySetMember-Methode auf.

Die DynamicObject-Klasse implementiert der DLR-Schnittstelle IDynamicMetaObjectProvider, die es Ihnen ermöglicht, Instanzen der DynamicObject-Klasse zwischen Sprachen freizugeben, die das DLR-Interoperabilitätsmodell unterstützen. Sie können z. B. in C# eine Instanz der DynamicObject-Klasse erstellen und diese dann an eine IronPython-Funktion übergeben. Weitere Informationen finden Sie in der Übersicht über die Dynamic Language Runtime-Dokumentation auf der CodePlex-Website.

HinweisHinweis

Wenn Sie ein einfaches Szenario haben, in dem Sie ein Objekt benötigen, das nur Member zur Laufzeit hinzufügen und entfernen kann, das aber keine bestimmten Operationen definieren muss und über keine statische Member verfügt, verwenden Sie die ExpandoObject-Klasse.

Wenn Sie ein erweitertes Szenario benötigen, indem Sie definieren müssen, wie dynamische Objekte am Interoperabilitätsprotokoll teilnehmen, oder das Zwischenspeichern des schnellen dynamischen DLR-Dispatchs verwalten müssen, erstellen Sie eine eigene Implementierung der IDynamicMetaObjectProvider-Schnittstelle.

Angenommen, Sie möchten alternative Syntax zum Zugreifen auf Werte in einem Wörterbuch bereitstellen, damit Sie sampleDictionary.Text = "Sample text" statt sampleDictionary["Text"] = "Sample text" (sampleDictionary("Text") = "Sample text" in Visual Basic) schreiben können. Auch können Sie diese Syntax als die Groß-/Kleinschreibung nicht beachtend festlegen, sodass sampleDictionary.TextsampleDictionary.text entspricht.

Im folgenden Codebeispiel wird die DynamicObject-Klasse veranschaulicht, die von der DynamicDictionary-Klasse abgeleitet wird. Die DynamicDictionary-Klasse enthält ein Objekt des Dictionary<string, object>-Typs (Dictionary(Of String, Object) in Visual Basic), um die Schlüssel/Wert-Paare zu speichern, und überschreibt die TrySetMember-Methode und TryGetMember-Methode, um die neue Syntax zu unterstützen. Außerdem wird eine Count-Eigenschaft bereitgestellt, die anzeigt, wie viele dynamische Eigenschaften das Wörterbuch enthält.


// The class derived from DynamicObject.
public class DynamicDictionary : DynamicObject
{
    // The inner dictionary.
    Dictionary<string, object> dictionary
        = new Dictionary<string, object>();

    // This property returns the number of elements
    // in the inner dictionary.
    public int Count
    {
        get
        {
            return dictionary.Count;
        }
    }

    // If you try to get a value of a property 
    // not defined in the class, this method is called.
    public override bool TryGetMember(
        GetMemberBinder binder, out object result)
    {
        // Converting the property name to lowercase
        // so that property names become case-insensitive.
        string name = binder.Name.ToLower();

        // If the property name is found in a dictionary,
        // set the result parameter to the property value and return true.
        // Otherwise, return false.
        return dictionary.TryGetValue(name, out result);
    }

    // If you try to set a value of a property that is
    // not defined in the class, this method is called.
    public override bool TrySetMember(
        SetMemberBinder binder, object value)
    {
        // Converting the property name to lowercase
        // so that property names become case-insensitive.
        dictionary[binder.Name.ToLower()] = value;

        // You can always add a value to a dictionary,
        // so this method always returns true.
        return true;
    }
}

class Program
{
    static void Main(string[] args)
    {
        // Creating a dynamic dictionary.
        dynamic person = new DynamicDictionary();

        // Adding new dynamic properties. 
        // The TrySetMember method is called.
        person.FirstName = "Ellen";
        person.LastName = "Adams";

        // Getting values of the dynamic properties.
        // The TryGetMember method is called.
        // Note that property names are case-insensitive.
        Console.WriteLine(person.firstname + " " + person.lastname);

        // Getting the value of the Count property.
        // The TryGetMember is not called, 
        // because the property is defined in the class.
        Console.WriteLine(
            "Number of dynamic properties:" + person.Count);

        // The following statement throws an exception at run time.
        // There is no "address" property,
        // so the TryGetMember method returns false and this causes a
        // RuntimeBinderException.
        // Console.WriteLine(person.address);
    }
}

// This example has the following output:
// Ellen Adams
// Number of dynamic properties: 2


Weitere Beispiele finden Sie unter Creating Wrappers with DynamicObject im Blog häufig gestellter Fragen zu C#.

.NET Framework

Unterstützt in: 4

.NET Framework Client Profile

Unterstützt in: 4

Windows 7, Windows Vista SP1 oder höher, Windows XP SP3, Windows Server 2008 (Server Core wird nicht unterstützt), Windows Server 2008 R2 (Server Core wird mit SP1 oder höher unterstützt), Windows Server 2003 SP2

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Community-Inhalt Hinzufügen
Anmerkungen FAQ