LoginSignup
2
2

More than 5 years have passed since last update.

C#に動的型付けを導入する

Last updated at Posted at 2018-05-01

動機

C#は静的型付け!!
なんだけど、型を定義するのがたまに面倒。
私、javascriptなんかも書くことがありますので、any型に親しみすぎてきつい。

対策

C#に動的型付けを導入する。

方法

DynamicObjectクラスとDictionaryクラスのdynamicコンボを使う。

コード

以下、簡略化したソースコード。
下記のクラスのインスタンス生成時にdynamicで変数を定義するのがポイント。

using System.Collections.Generic;
using System.Dynamic;

namespace Library
{
    public class ArgsObject : DynamicObject
    {
        private Dictionary<string, object> dictionary;

        public ArgsObject()
        {
            this.dictionary = new Dictionary<string, object>();
        }

        // プロパティに値を設定しようとしたときに呼ばれる
        public override bool TrySetMember(SetMemberBinder binder, object value)
        {
            this.dictionary[binder.Name] = value;
            return true;
        }

        // プロパティから値を取得しようとしたときに呼ばれる
        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            result = this.dictionary[binder.Name];
            return true;
        }

        public bool ContainsKey(string key)
        {
            return this.dictionary.ContainsKey(key);
        }
    }
}

使用例

namespace Usage{
    public class UseDyanamic {
        public void a() {
            // ここでdynamicを使用することが大事
            dynamic args = new ArgsObject();
            args.AAA = "aaa";
            args.BBB = 1;
        }
    }
}

結論

超快適!!
ダックタイピング大好きです!!

※ご使用時にはかなりの注意が必要です。ご使用の際は、ご自身の判断のもとお願いいたします。また、try-catchなどはここでは記載しておりません。ご自身の判断で追加してください。

参考URL

公式で似たようなことしている。
https://code.msdn.microsoft.com/windowsdesktop/30-DynamicObject-dynamic-8d1ff1e4

Qiitaにも似たような記事があった。
https://qiita.com/NetSeed/items/0210cfe514b1bb24d651

2
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2