Heim >Backend-Entwicklung >C++ >Wie kann ich C#-Eigenschaften zur Laufzeit dynamisch hinzufügen?

Wie kann ich C#-Eigenschaften zur Laufzeit dynamisch hinzufügen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-30 20:09:16952Durchsuche

How Can I Add C# Properties Dynamically at Runtime?

Dynamisches Hinzufügen von C#-Eigenschaften zur Laufzeit mithilfe von ExpandoObject

Das Hinzufügen dynamischer Eigenschaften zu Objekten zur Laufzeit ist in vielen Anwendungen eine häufige Anforderung. Ein gängiger Ansatz hierfür ist die Verwendung eines Wörterbuchs oder einer Parametersammlung. Für Szenarien, in denen die Anzahl und Namen der Eigenschaften vorher unbekannt sind, greift dieser Ansatz jedoch zu kurz.

Verwendung von ExpandoObject

Das .NET Framework bietet eine integrierte Lösung für dieses Problem: ExpandoObject. Mit dieser Klasse können Sie dynamische Objekte erstellen, denen Sie zur Laufzeit Eigenschaften hinzufügen und entfernen können.

// Create a dynamic object
dynamic dynObject = new ExpandoObject();

// Add dynamic properties
dynObject.SomeDynamicProperty = "Hello!";

// Execute dynamic actions
dynObject.SomeDynamicAction = (msg) =>
{
    Console.WriteLine(msg);
};

dynObject.SomeDynamicAction(dynObject.SomeDynamicProperty);

Benutzerdefiniertes dynamisches Objekt

Für kompliziertere Szenarien möchten Sie möglicherweise Ihre eigene Dynamik erstellen Objekt, das die DynamicObject-Klasse implementiert. Dies gibt Ihnen mehr Kontrolle darüber, wie dynamische Mitgliederanfragen behandelt werden.

public sealed class MyDynObject : DynamicObject
{
    // Member dictionary
    private readonly Dictionary<string, object> _properties;

    public MyDynObject(Dictionary<string, object> properties)
    {
        _properties = properties;
    }

    // Get dynamic member names
    public override IEnumerable<string> GetDynamicMemberNames()
    {
        return _properties.Keys;
    }

    // Try to get a dynamic member
    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        if (_properties.ContainsKey(binder.Name))
        {
            result = _properties[binder.Name];
            return true;
        }
        else
        {
            result = null;
            return false;
        }
    }

    // Try to set a dynamic member
    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        if (_properties.ContainsKey(binder.Name))
        {
            _properties[binder.Name] = value;
            return true;
        }
        else
        {
            return false;
        }
    }
}

Mit diesem Ansatz können Sie dynamische Objekte mit beliebigen gewünschten Eigenschaften erstellen:

var dyn = GetDynamicObject(new Dictionary<string, object>()
{
    { "prop1", 12 }
});

Console.WriteLine(dyn.prop1);
dyn.prop1 = 150;

Achtung: Beachten Sie bei der Verwendung dynamischer Objekte, dass der Compiler Ihre dynamischen Aufrufe nicht überprüfen kann und es zu Laufzeitfehlern oder einem Mangel an Intellisense kommen kann Unterstützung.

Das obige ist der detaillierte Inhalt vonWie kann ich C#-Eigenschaften zur Laufzeit dynamisch hinzufügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn