返回首页

NET中的:几乎八九不离十的实时动态|
新的动态关键字是一个伟大的方式创建和修改您的NET代码中的一个动态对象,例如,检查这段代码吗??

dynamic counter = new {

    sent = 0,

    received = 0

};

counter.sent++;

??哦??等待??/ STRONG>,没有按,AOT的实际工作??/ EM>
,星光大道,因为即使你有一个对象声明为动态的,它仍然是一样的旧对象,它总是引擎盖下。也许不是动态的乌托邦,我们的预期。看起来像普通的OL吗??一个稍微干净的语法思考。
坏消息??/ EM>
然而,微软真棒足以让我们能够创造我们自己的动态类型由单纯从DynamicObject类继承。这篇文章看起来如何,我们可以创建一个半动态对象,由自己处理的结合方法。
我们的目标是创建一个对象,我们可以添加,删除和动态更改的值。它最终被比我们预期的更容易一些。让,AOS最低的代码,我们需要开始。{C}
注意:如果您下载上面的源代码,你可能会奇怪,为什么这些例子,唐,AOT看起来是一样的。源代码是完整的动态类,而这个职位只使用DynamicObject类的基本知识。
为了创建我们的动态对象,我们必须处理获取和设置值。我们可以用一个简单的Dictionarylt;字符串,objectgt;持有我们的价值观,直到我们需要它们。
//handles getting values from our object

public override void TryGetMember(GetMemberBinder binder, out object result) {

    return this._Values.TryGetValue(binder.name, out result);

}



//handles assigning values to our object

public override bool TrySetMember(SetMemberBinder binder, object value) {

    this._Values.Remove(binder.name);

    if (value is object) { this._Values.Add(binder.name, value); }

    return true;

}

没有太多的代码,但现在我们的动态对象是一个比以前更有活力一点。现在,我们可以工作的属性轻松了许多。
//create the new object

dynamic simple = new SimpleDynamic();



//add and update some values

simple.red = "#f00";

simple.green = "#0f0";

simple.count = 10;

simple.add = new Action<int>(value => simple.count += value);



//and check the values

Console.WriteLine(simple.red); // #f00

Console.WriteLine(simple.green); // #0f0

Console.WriteLine(simple.count); // 10



//invoke methods

simple.add(5);

Console.WriteLine(simple.count); // 15

当然,这个类的ISN,AOT,因为它有帮助,AOS唯一没有定期字符串索引词典,但有趣的是就看你怎么可以使的吗??代码>动态??对象只有几行代码。至于
{A},它有几个,这个类没有按,AOT有额外的功能。直接使用匿名类型,打造出整个对象=运算符的支持枚举通过成员名称字符串索引(单嵌套属性)
这里Dynamic.cs类可以做的是几个例子:
//create using anonymous types (and nested anonymous types)

dynamic info = new Dynamic(new {

    name = "Hugo",

    age = 30,

    settings = new {

        color = "orange",

        homepage = "website.com"

    }});



//add values using +=

info.create = new { value = false; }

info.nested.value.allowed = 55;



//enumeration of properties

foreach(string prop in info) {

    Console.WriteLine("{0}: {1}", prop, info[prop]);

}

我,对在项目中使用这个有很多的AOD谨慎,但它真的很有趣,看到那种控制Microsoft已建成新DynamicObject类。
{A2} {五}

回答

评论会员: 时间:2