ホームページ > バックエンド開発 > C++ > コレクションを使用せずに実行時に C# プロパティを動的に追加する方法

コレクションを使用せずに実行時に C# プロパティを動的に追加する方法

Barbara Streisand
リリース: 2025-01-02 21:12:40
オリジナル
398 人が閲覧しました

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

コレクションを使用せずに実行時に C# プロパティを動的に追加する

実行時に動的に追加できるプロパティを持つ動的オブジェクトを作成する必要があるシナリオを考えてみましょう。辞書やパラメータのコレクションを使用する代わりに、ExpandoObject クラスを利用できます。

ExpandoObject

ExpandoObject を使用すると、実行時にインスタンスのメンバーを追加および削除できます。動的バインディング機能を有効にします。次の例に示すように、プロパティを動的に操作する便利な方法が提供されます。

dynamic dynObject = new ExpandoObject();
dynObject.SomeDynamicProperty = "Hello!";
ログイン後にコピー

カスタム ダイナミック オブジェクト

ExpandoObject アプローチに基づいて、動的プロパティの取得と設定を管理するカスタム動的オブジェクト。次のコードは、この概念を示しています。

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

DynamicObject インターフェイスを実装することにより、動的メンバー アクセス メカニズムを完全に制御できるようになります。これにより、動的オブジェクトのカスタム ルールと動作を実装できます。

使用法

カスタム動的オブジェクトを配置すると、プロパティを追加し、それらを取得できます。ランタイム:

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

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

注:

動的オブジェクトは強力ですが、注意して使用する必要があります。コンパイラは動的呼び出しを検証できないため、注意しないと実行時エラーが発生する可能性があります。実稼働コードで使用する前に、基礎となる仕組みと潜在的な問題を理解することが重要です。

以上がコレクションを使用せずに実行時に C# プロパティを動的に追加する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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