国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C# > 正文

C# Dynamic關(guān)鍵字之:調(diào)用屬性、方法、字段的實(shí)現(xiàn)方法

2020-01-24 03:20:32
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

新建類Product:

復(fù)制代碼 代碼如下:

class Product
{
    public string name;
    public int Id { get; set; }

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


Main方法代碼如下:
復(fù)制代碼 代碼如下:

static void Main(string[] args)
{
    //dynamic對(duì)象
    dynamic dynProduct = new Product();

    //設(shè)置name字段
    dynProduct.name = "n1";

    //設(shè)置Id屬性
    dynProduct.Id = 1;
    dynProduct.Id = dynProduct.Id + 3;

    //調(diào)用ShowProduct方法
    dynProduct.ShowProduct();

    Console.ReadLine();
}



輸出如下:

clip_image002

修改dynProduct.Id=”1”,此時(shí)"1”是字符串

運(yùn)行:

image

因?yàn)閜roduct的Id屬性是int型

修改dynProduct.ShowProducT(); 運(yùn)行:

image

因?yàn)閜roduct 包含ShowProduct 的方法,但是并沒(méi)有包含ShowProducT的方法,

所以dynamic不支持大小寫(xiě)不同。根本原因是因?yàn)镃#也不支持。

修改Product中name的修飾符:將Public改為private:

private string name;

再次運(yùn)行代碼:

image

因?yàn)閚ame是private,外部無(wú)法訪問(wèn)。。。

但是反射好像是可以的啊?

那么嘗試下反射吧:

復(fù)制代碼 代碼如下:

Type productType = typeof(Product);
Product p = new Product();

FieldInfo fi = productType.GetField("name",
    BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly);
fi.SetValue(p, "通過(guò)反射設(shè)置的值");

運(yùn)行,結(jié)果如下:

image

因?yàn)樵谀承┌踩拗茥l件下,是不運(yùn)行讀取和設(shè)置私有字段的,例如在silverlight中。所以微軟大概出于對(duì)這一點(diǎn)的考慮,所以dynamic不支持私有字段的讀取和設(shè)置吧,以上純屬個(gè)人猜想。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 准格尔旗| 翁牛特旗| 斗六市| 萨嘎县| 容城县| 张家港市| 海南省| 罗江县| 沿河| 连州市| 黄浦区| 沁阳市| 武宁县| 凤阳县| 虎林市| 莆田市| 长春市| 呼图壁县| 石家庄市| 襄汾县| 昌黎县| 台山市| 肃宁县| 陆丰市| 太和县| 泌阳县| 新源县| 东源县| 兴文县| 廉江市| 驻马店市| 英德市| 芜湖市| 大安市| 三原县| 鲁甸县| 新密市| 靖远县| 共和县| 山东省| 于田县|