Heim > Backend-Entwicklung > C++ > Wie füge ich C#-Eigenschaften zur Laufzeit dynamisch hinzu, ohne Sammlungen zu verwenden?

Wie füge ich C#-Eigenschaften zur Laufzeit dynamisch hinzu, ohne Sammlungen zu verwenden?

Barbara Streisand
Freigeben: 2025-01-02 21:12:40
Original
398 Leute haben es durchsucht

How to Dynamically Add C# Properties at Runtime Without Using Collections?

C#-Eigenschaften zur Laufzeit dynamisch hinzufügen, ohne Sammlungen zu verwenden

Stellen Sie sich ein Szenario vor, in dem Sie ein dynamisches Objekt mit Eigenschaften erstellen müssen, die zur Laufzeit dynamisch hinzugefügt werden können. Anstatt ein Wörterbuch oder eine Sammlung von Parametern zu verwenden, können Sie die ExpandoObject-Klasse nutzen.

ExpandoObject

Mit ExpandoObject können Sie Mitglieder seiner Instanzen zur Laufzeit hinzufügen und entfernen. Ermöglicht dynamische Bindungsfunktionen. Es bietet eine bequeme Möglichkeit, Eigenschaften dynamisch zu manipulieren, wie im folgenden Beispiel zu sehen ist:

dynamic dynObject = new ExpandoObject();
dynObject.SomeDynamicProperty = "Hello!";
Nach dem Login kopieren

Benutzerdefiniertes dynamisches Objekt

Aufbauend auf dem ExpandoObject-Ansatz können Sie erstellen ein benutzerdefiniertes dynamisches Objekt, das das Abrufen und Festlegen dynamischer Eigenschaften verwaltet. Der folgende Code demonstriert dieses Konzept:

public static dynamic GetDynamicObject(Dictionary<string, object> properties)
{
    return new MyDynObject(properties);
}

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

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

    public override IEnumerable<string> GetDynamicMemberNames()
    {
        return _properties.Keys;
    }

    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;
        }
    }

    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

Durch die Implementierung der DynamicObject-Schnittstelle erhalten Sie die volle Kontrolle über den dynamischen Member-Zugriffsmechanismus. Dadurch können Sie benutzerdefinierte Regeln und Verhaltensweisen für Ihr dynamisches Objekt implementieren.

Verwendung

Wenn Ihr benutzerdefiniertes dynamisches Objekt vorhanden ist, können Sie Eigenschaften hinzufügen und diese zur Laufzeit abrufen :

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

Console.WriteLine(dyn.prop1);
dyn.prop1 = 150;
Nach dem Login kopieren

Hinweis:

Dynamische Objekte sind leistungsstark, müssen es aber mit Vorsicht verwendet werden. Der Compiler kann dynamische Aufrufe nicht überprüfen und es kann zu Laufzeitfehlern kommen, wenn Sie nicht vorsichtig sind. Es ist wichtig, die zugrunde liegenden Mechanismen und potenziellen Probleme zu verstehen, bevor Sie sie im Produktionscode verwenden.

Das obige ist der detaillierte Inhalt vonWie füge ich C#-Eigenschaften zur Laufzeit dynamisch hinzu, ohne Sammlungen zu verwenden?. 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