ホームページ > バックエンド開発 > C++ > 実行時に C# プロパティを動的に追加するにはどうすればよいですか?

実行時に C# プロパティを動的に追加するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-30 20:09:16
オリジナル
927 人が閲覧しました

How Can I Add C# Properties Dynamically at Runtime?

ExpandoObject を使用して実行時に C# プロパティを動的に追加する

実行時にオブジェクトに動的プロパティを追加することは、多くのアプリケーションで共通の要件です。これを実現する一般的なアプローチは、パラメータの辞書またはコレクションを使用することです。ただし、プロパティの数と名前が事前に不明なシナリオでは、このアプローチは不十分です。

ExpandoObject の使用

.NET Framework は、この問題に対する組み込みのソリューションである ExpandoObject を提供します。このクラスを使用すると、実行時にプロパティを追加および削除できる動的オブジェクトを作成できます。

// 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);
ログイン後にコピー

カスタム動的オブジェクト

より複雑なシナリオの場合は、独自の動的オブジェクトを作成することもできます。 DynamicObject クラスを実装するオブジェクト。これにより、動的メンバー要求の処理方法をより詳細に制御できるようになります。

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;
        }
    }
}
ログイン後にコピー

このアプローチを使用すると、任意のプロパティを持つ動的オブジェクトを作成できます。

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

Console.WriteLine(dyn.prop1);
dyn.prop1 = 150;
ログイン後にコピー

注意: 動的オブジェクトを使用する場合、コンパイラーは動的呼び出しを検証できず、ランタイム エラーやインテリセンスの不足が発生する可能性があることに注意してください。サポートします。

以上が実行時に C# プロパティを動的に追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート