亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#動態對象(dynamic)詳解(實現方法和屬性的動態)

2019-10-29 21:13:29
字體:
來源:轉載
供稿:網友

C#的動態對象的屬性實現比較簡單,如果要實現動態語言那種動態方法就比較困難,因為對于dynamic對象,擴展方法,匿名方法都是不能用直接的,這里還是利用對象和委托來模擬這種動態方法的實現,看起來有點javascript的對象味道:

1) 定義一個委托,參數個數可變,參數都是object類型:這里的委托多有個dynamic參數,代表調用這個委托的動態對象本身。

public delegate object MyDelegate(dynamic Sender, params object[] PMs);

2) 定義一個委托轉載對象,因為dynamic對象不能直接用匿名方法,這里用對象去承載:

public class DelegateObj  {    private MyDelegate _delegate;    public MyDelegate CallMethod    {      get { return _delegate; }    }    private DelegateObj(MyDelegate D)    {      _delegate = D;    }    /// <summary>    /// 構造委托對象,讓它看起來有點javascript定義的味道.    /// </summary>    /// <param name="D"></param>    /// <returns></returns>    public static DelegateObj Function(MyDelegate D)    {      return new DelegateObj(D);    }  }

3) 定義一個動態對象:

public class DynObj : DynamicObject  {    //保存對象動態定義的屬性值    private Dictionary<string, object> _values;    public DynObj()    {      _values = new Dictionary<string, object>();    }    /// <summary>    /// 獲取屬性值    /// </summary>    /// <param name="propertyName"></param>    /// <returns></returns>    public object GetPropertyValue(string propertyName)    {      if (_values.ContainsKey(propertyName) == true)      {        return _values[propertyName];      }      return null;    }    /// <summary>    /// 設置屬性值    /// </summary>    /// <param name="propertyName"></param>    /// <param name="value"></param>    public void SetPropertyValue(string propertyName,object value)    {      if (_values.ContainsKey(propertyName) == true)      {        _values[propertyName] = value;      }      else      {        _values.Add(propertyName, value);      }    }    /// <summary>    /// 實現動態對象屬性成員訪問的方法,得到返回指定屬性的值    /// </summary>    /// <param name="binder"></param>    /// <param name="result"></param>    /// <returns></returns>    public override bool TryGetMember(GetMemberBinder binder, out object result)    {      result = GetPropertyValue(binder.Name);      return result == null ? false : true;    }    /// <summary>    /// 實現動態對象屬性值設置的方法。    /// </summary>    /// <param name="binder"></param>    /// <param name="value"></param>    /// <returns></returns>    public override bool TrySetMember(SetMemberBinder binder, object value)    {      SetPropertyValue(binder.Name, value);      return true;    }    /// <summary>    /// 動態對象動態方法調用時執行的實際代碼    /// </summary>    /// <param name="binder"></param>    /// <param name="args"></param>    /// <param name="result"></param>    /// <returns></returns>    public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)    {      var theDelegateObj = GetPropertyValue(binder.Name) as DelegateObj;      if (theDelegateObj == null || theDelegateObj.CallMethod == null)      {        result = null;        return false;      }      result = theDelegateObj.CallMethod(this,args);      return true;    }    public override bool TryInvoke(InvokeBinder binder, object[] args, out object result)    {      return base.TryInvoke(binder, args, out result);    }  }

應用測試代碼:

dynamic theObj = new DynObj();      theObj.aaa = "this is a test";//動態屬性      //動態方法,這里不能沒法定義參數,調用的時候可以是任意多參數,具體參數類型和含義就只能自己去小心處理了.      theObj.show = DelegateObj.Function((s, pms) =>      {        if (pms != null && pms.Length > 0)        {          MessageBox.Show(pms[0].ToString() + ":" + s.aaa);        }        else        {          MessageBox.Show(s.aaa);        }        return null;      }      );      theObj.show("hello");

雖然看起來上面有點Js定義對象方法的味道,但由于C#是靜態語言,提供的動態模擬機制還是有限的,看起來是動態,但所有的值存放和方法都需要自己寫代碼去處理.

上面代碼在vs2010,windows 2008 server,框架4.0 上測試OK.

以上這篇C#動態對象(dynamic)詳解(實現方法和屬性的動態)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国内精品在线| 亚洲国内高清视频| 欧美日韩国产色| 欧美激情欧美狂野欧美精品| 日韩欧美国产激情| 久久久久久久久综合| 精品女厕一区二区三区| 日韩激情视频在线播放| 久久精品国产精品| 亚洲精品乱码久久久久久按摩观| 日韩中文字幕av| 中文字幕日韩精品在线| 国产欧美日韩精品专区| 九九热r在线视频精品| **欧美日韩vr在线| 97超碰国产精品女人人人爽| 两个人的视频www国产精品| 国产有码在线一区二区视频| 国产精品爱久久久久久久| 91亚洲精品一区二区| 欧美黑人性生活视频| 亚洲第一页在线| 高潮白浆女日韩av免费看| 国产婷婷色综合av蜜臀av| 2019精品视频| 欧美重口另类videos人妖| 欧美另类极品videosbestfree| 国产午夜精品免费一区二区三区| 亚洲免费视频一区二区| 中文字幕日韩在线观看| 国产亚洲激情视频在线| 久久久久国产精品免费| 欧美裸体xxxx极品少妇| 国产精品一区二区三区毛片淫片| 日韩精品视频在线观看网址| 日韩在线免费av| 91精品国产九九九久久久亚洲| 亚洲天堂av在线免费观看| 欧美日韩视频在线| 欧美国产日韩一区二区在线观看| 综合国产在线视频| 久久久精品一区二区| 日韩中文字幕久久| 日韩精品亚洲视频| 亚洲片在线资源| 琪琪亚洲精品午夜在线| 亚洲97在线观看| 欧美伦理91i| 久久久999国产| 北条麻妃一区二区三区中文字幕| 日韩成人高清在线| 91免费看视频.| 国产精品欧美一区二区三区奶水| 久久精品亚洲精品| 九九久久久久久久久激情| xvideos成人免费中文版| 成人动漫网站在线观看| 亚洲在线视频观看| 欧美寡妇偷汉性猛交| 91av视频在线免费观看| 亚洲人成电影在线播放| 孩xxxx性bbbb欧美| 欧美日韩一区二区在线| 久久成人精品一区二区三区| 国产成人一区二区三区小说| 日韩免费视频在线观看| 久久av红桃一区二区小说| 中文字幕亚洲欧美日韩在线不卡| 国产99久久精品一区二区 夜夜躁日日躁| 成人免费网站在线看| 日本一区二区在线播放| 欧美精品久久久久久久免费观看| 青青久久av北条麻妃黑人| 亚洲成色999久久网站| 国产精品99一区| 日韩av快播网址| 在线精品视频视频中文字幕| 国产欧美精品一区二区三区介绍| 日韩欧美在线第一页| 国产精品老女人视频| 欧美极品少妇xxxxx| 成人欧美一区二区三区黑人| 亚洲自拍在线观看| 亚洲xxxx18| 欧美视频中文字幕在线| 永久免费精品影视网站| 国产成+人+综合+亚洲欧美丁香花| 91精品国产91久久久久| 日韩中文字幕精品视频| 欧美日韩成人在线视频| 亚洲成年人影院在线| 91精品久久久久久久久久久久久| 久久久精品一区二区三区| 国产精品精品视频一区二区三区| 欧美日韩成人在线观看| 欧美激情视频播放| 欧美噜噜久久久xxx| 亚洲成年人在线播放| 全球成人中文在线| 国产精品aaa| 国产精品网站入口| 欧美乱大交xxxxx另类电影| 日韩在线欧美在线国产在线| 国产自产女人91一区在线观看| 国产精品视频久久久| 欧美怡春院一区二区三区| 欧美亚洲另类视频| 久久视频这里只有精品| 大量国产精品视频| 欧美性xxxxxxx| 91伊人影院在线播放| 欧美成人精品一区二区三区| 日韩中文字幕免费视频| 国产中文日韩欧美| 日韩精品在线播放| 欧美精品中文字幕一区| 懂色av影视一区二区三区| 国产日本欧美一区二区三区| 亚洲免费小视频| 亚洲人成绝费网站色www| 国产精品老牛影院在线观看| 91网站免费看| 国产精品美女www| 97在线视频国产| 亚洲精品一区av在线播放| 全球成人中文在线| 国产精品色婷婷视频| 91色在线视频| 亚洲综合一区二区不卡| 国产精品久久久久aaaa九色| 国产亚洲精品美女久久久| 久久精品99久久香蕉国产色戒| **欧美日韩vr在线| 欧美乱大交做爰xxxⅹ性3| 欧美在线播放视频| 精品久久久久久中文字幕大豆网| 亚洲va欧美va国产综合剧情| 国产精品久久久久久av福利| 亚洲欧美在线一区二区| 欧美高清电影在线看| 日韩在线中文视频| 日韩欧美亚洲国产一区| 亚洲最大成人在线| 欧美电影在线播放| 欧美激情精品久久久久久黑人| 成人做爰www免费看视频网站| 欧洲精品久久久| 久久久久久久亚洲精品| 中文字幕精品www乱入免费视频| 欧美大片在线免费观看| 欧美激情在线狂野欧美精品| 欧美国产高跟鞋裸体秀xxxhd| 国产亚洲a∨片在线观看| 欧美中文在线字幕| 成人性生交大片免费看小说| 中国china体内裑精亚洲片| 久久久视频精品| 久久在线视频在线| 国产在线精品一区免费香蕉| 国内精品在线一区| 另类色图亚洲色图| 亚洲美女激情视频| 欧美成人免费视频| 77777亚洲午夜久久多人|