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
Freigeben: 2024-12-30 20:09:16
Original
927 Leute haben es durchsucht

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);
Nach dem Login kopieren

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;
        }
    }
}
Nach dem Login kopieren

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;
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage