1. 程式人生 > >c# 中dynamic的使用

c# 中dynamic的使用

靜態 重載 實例 程序 字段 erb tel args try

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的使用