c# 中dynamic的使用
dynamic 是c#中的一個關鍵字,用來表示動態類型,即在運行時確定類型。
dynamic value;
Random ran = new Random();//生成隨機數
value = ran.Next(0, 10) > 5 ? (dynamic)1 : (dynamic)"A";
dynamic display = value + value;
Console.WriteLine(value);
程序輸出隨著隨機數變化而不確定,
當隨機數小於5時 value = 1,display=1 + 1 最後輸出2;
當隨機數大於5時 value = “A”,display = “A” + “A” 最後輸出“AA”;
dynamic本質上是object,方法不能靠dynamic和object來區分
即Method(object o)和Method(dynamic d)其實是一樣的。
如果想要使自定義的類型支持dynamic ,需要實現IDynamicMetaObjectProvider接口,其中有GetMetaObject方法,返回DynamicMetaObject的一個派生類型,
這個類型可以處理自定義類型對象的方法、字段、屬性等
dynamic只能支持訪問實例對象的方法、字段、屬性,因為dynamic必須是一個對象。如果想要動態訪問類型的靜態成員,可以定義一個
StaticDynamic類型派生自System.Dynamic.DynamicObject,重載其中
public override bool TryGetMember(GetMemberBinder binder, out object result)
public override bool TrySetMember(SetMemberBinder binder, object value)
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
重載方法,使用反射技術查詢類型靜態成員,並加以操作。
c# 中dynamic的使用