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

首頁 > 編程 > C# > 正文

C# Dynamic之:ExpandoObject,DynamicObject,DynamicMetaOb的應用(下)

2020-01-24 03:20:27
字體:
來源:轉載
供稿:網友

接上文:C# Dynamic關鍵字之:ExpandoObject,DynamicObject,DynamicMetaOb的應用(上)

為什么TryXXX方法沒有被調用??

將DynamicProduct 中的name修飾符改為private:

private string name;

可以在TrySetMember方法中設置斷點,再次運行:

image

clip_image002

clip_image004

為什么訪問修飾符是Public不調用TrySetMember,是Private 就調用了呢??

難道是因為private拋出了異常嗎??

再次看看Msdn對此的TrySetMember方法的解釋:

Msdn備注

…………….動態語言運行庫 (DLR) 將首先使用語言聯編程序在類中查找屬性的靜態定義。 如果沒有此類屬性,DLR 調用 TrySetMember 方法。

問題的原因是這樣的:首先DLR 使用語言聯編程序在類中查找name的靜態定義,

因為name是public,所以查找到了,然后返回,不會去調用TrySetMember方法了,

但是如果name是private,那么聯編程序在類中沒找到name的靜態定義,于是DLR嘗試調用TrySetMember方法。

修改TrySetMember方法如下:

復制代碼 代碼如下:

public override bool TrySetMember(SetMemberBinder binder, object value)
{
    Console.WriteLine("TrySetMember被調用了,Name:{0}", binder.Name);
    bool result = base.TrySetMember(binder, value);

    return true;
}



運行,可以發現不會拋出異常了:

clip_image002[5]

總結:首先DLR會嘗試查找屬性的靜態定義,如果沒有找到則會調用相應的TryXXX 方法,如果TryXXX方法返回false,代表TryXXX方法運行失敗,DLR隨后會拋出異常。

為了驗證是不是這樣,將DynamicProduct中屬性的靜態定義全部注釋掉,并且TryXXX方法全部返回True。完整的代碼如下:

復制代碼 代碼如下:

class DynamicProduct : DynamicObject
{
    #region dynamicProduct 的一些屬性的靜態定義

        //private string name;
        //public int Id { get; set; }

        //public void ShowProduct()
        //{
        //    Console.WriteLine("Id={0} ,Name={1}", Id, name);
        //}

    #endregion

    #region Override DynamicObject 的方法

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        Console.WriteLine("TryGetMember被調用了,Name:{0}", binder.Name);
        bool tryResult = base.TryGetMember(binder, out result);

        return true;
    }

    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        Console.WriteLine("TrySetMember被調用了,Name:{0}", binder.Name);
        bool tryResult = base.TrySetMember(binder, value);

        return true;
    }

    public override bool TryInvoke(InvokeBinder binder, object[] args, out object result)
    {
        Console.WriteLine("TryInvoke被調用了");
        bool tryResult = base.TryInvoke(binder, args, out result);

        return true;
    }

    public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
    {
        Console.WriteLine("TryInvokeMember被調用了,Name:{0}", binder.Name);
        bool tryResult = base.TryInvokeMember(binder, args, out result);

        return true;
    }

    #endregion
}


Main方法不變:
復制代碼 代碼如下:

static void Main(string[] args)
{
    dynamic dynProduct = new DynamicProduct();

    dynProduct.name = "n1"; //調用TrySetMember方法
    dynProduct.Id = 1;
    dynProduct.Id = dynProduct.Id + 3;
    dynProduct.ShowProduct();

    Console.ReadLine();
}

運行,結果如下:

clip_image002[9]

d.P3 = d.M1(d.P1, d.M2(d.P2));

按照從左到右,從里到外的原則。

1:先調用d.P1,DLR會嘗試調用d 的GetMetaObject 方法,此方法返回一個MyMetaObject對象。

接著DLR知道你調用的是一個屬性,于是它調用返回的MyMetaObject對象的BindGetMember 方法,

輸出為GetMember of property P1

2:調用d.P2,和調用d.P1 一樣.

3:調用d.M2,同樣DLR調用d的GetMetaObject方法,返回一個MyMetaObject對象,接著調用返回對象的BindInvokeMember 方法。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
2018中文字幕一区二区三区| 98精品国产高清在线xxxx天堂| 懂色av影视一区二区三区| 中文字幕一精品亚洲无线一区| 久久久免费精品| 亚洲精品久久久久久久久久久久久| 亚洲国产精品美女| 亚洲欧美日韩中文在线| 欧美日韩精品在线观看| 国产免费一区二区三区香蕉精| 日韩精品在线视频| 日韩av在线免费| 亚洲色图偷窥自拍| 欧美激情乱人伦一区| 欧美国产视频一区二区| 日韩精品免费在线播放| 亚洲国产欧美日韩精品| 久久影院中文字幕| 欧美亚洲国产成人精品| 亚洲色图第一页| 欧美午夜久久久| 国产成人涩涩涩视频在线观看| 26uuu另类亚洲欧美日本一| 亚洲视频777| 81精品国产乱码久久久久久| 日韩一级黄色av| 日韩黄色av网站| 欧美日韩亚洲精品内裤| 精品少妇一区二区30p| 成人精品久久久| 欧美伊久线香蕉线新在线| 日韩欧美在线视频观看| 欧美大人香蕉在线| 亚洲欧美日韩国产成人| 91精品久久久久| 亚洲欧美激情一区| 亚洲精品欧美日韩| 国产综合福利在线| 久久亚洲精品成人| 精品久久久久国产| 国产成人综合精品在线| www.精品av.com| 亚洲成人黄色在线观看| 欧美专区第一页| 精品福利樱桃av导航| 国产精品久久久一区| 久久久最新网址| 狠狠躁18三区二区一区| 久久久女女女女999久久| 成人黄色激情网| 亚洲第一av网站| 久久久精品视频成人| 国内精品久久久久久| 日韩国产在线播放| 日韩视频在线一区| 日韩精品极品在线观看播放免费视频| 精品美女国产在线| 国产免费一区二区三区香蕉精| 国产一区二区三区网站| 亚洲国产精品悠悠久久琪琪| 91欧美精品成人综合在线观看| 国产精品美女久久久久久免费| 国产精品视频在线观看| 国产日韩在线亚洲字幕中文| 亚洲高清福利视频| 久久国产精品影视| 中文字幕日韩av综合精品| 国产精品国模在线| 久久精品人人爽| 欧美成人黑人xx视频免费观看| 国产视频欧美视频| 精品亚洲夜色av98在线观看| 九九视频直播综合网| 97视频在线观看成人| 亚洲激情第一页| 欧美情侣性视频| 爱福利视频一区| 久久全国免费视频| 一区二区欧美激情| 亚洲欧美成人在线| 秋霞午夜一区二区| 亚洲一区中文字幕在线观看| 亚洲国产精品成人va在线观看| 日韩中文字幕视频在线观看| 国产亚洲欧美日韩美女| 久久成人亚洲精品| 1769国产精品| 亚洲级视频在线观看免费1级| 亚洲国产精品电影在线观看| 成人免费高清完整版在线观看| 国产精品视频地址| 亚洲第一在线视频| 91国产美女视频| 日本精品免费一区二区三区| 亚洲精品短视频| 日韩亚洲一区二区| 国产成人福利夜色影视| 中文字幕亚洲一区二区三区| 亚洲黄色成人网| 日日狠狠久久偷偷四色综合免费| 国产精品一区av| 亚洲人成77777在线观看网| 久久久精品一区| 26uuu国产精品视频| 91国偷自产一区二区三区的观看方式| 91在线网站视频| 欧美乱妇40p| 欧美日韩福利电影| 中文字幕一精品亚洲无线一区| 欧美成人免费网| 欧美麻豆久久久久久中文| 91久久国产婷婷一区二区| 国产精品黄色影片导航在线观看| 亚洲自拍偷拍视频| 精品一区二区亚洲| 中文字幕一精品亚洲无线一区| 中文字幕久热精品在线视频| 久久视频免费观看| 91香蕉电影院| 日韩av电影手机在线观看| 97在线免费观看| 狠狠色狠色综合曰曰| 一区二区欧美久久| 久久综合久久美利坚合众国| 黑人巨大精品欧美一区二区| 日韩麻豆第一页| 在线观看国产精品淫| 成人午夜在线视频一区| 国产精品丝袜高跟| 日韩av免费在线观看| 日韩欧美亚洲范冰冰与中字| 青青久久av北条麻妃黑人| 亚洲国产三级网| 欧美老女人bb| 欧美精品一本久久男人的天堂| 欧美黄色片视频| 日韩69视频在线观看| 亚洲国产精品美女| 亚洲国产精彩中文乱码av在线播放| 一区二区三区久久精品| 亚洲乱码一区二区| 亚洲国产精品电影| 国产精品日韩在线一区| 欧美另类69精品久久久久9999| 国产精品美乳在线观看| 97视频在线播放| 久久久久久欧美| 久久精品在线视频| 欧美中文字幕在线视频| 日本最新高清不卡中文字幕| 亚洲午夜激情免费视频| 欧美裸体xxxx极品少妇软件| 久热精品视频在线免费观看| 国产成人亚洲综合| 97婷婷涩涩精品一区| 亚洲第一精品夜夜躁人人爽| 亚洲精品国产美女| 最近2019年手机中文字幕| 成人黄色免费在线观看| 91精品久久久久| 国产精品久久久久久久久久久久| 国产精品视频资源| 亚洲最大福利视频| 亚洲国产精品久久久久久|