C4.0和VS2010新特性(10)
时间:2025-04-20
时间:2025-04-20
介绍VS2010的新特性等一些新功能
首先创建了一个d的动态类型,然后当赋值给Name的时候,因为Name是属性,所以触发了“TrySetMember”函数,该函数自动检查是否已经存在这个属性名,如果不存在,则将其添加进入一个Dictionary中并将对应赋予的值传递进去保存起来。当使用输出的时候,同样地,TryGetMember被触发,系统检测是否预先创建过这个值,如果没有,则抛出异常;存在的话,取出对应的存储value并返回给系统。
2)
dynamic d = new SimpleDynamic();
Console.WriteLine(d.Say(“Hello!”));
首先创建了一个d的动态类型,当动态创建一个方法的时候,系统检测是否包含这个方法名,不包含将添加这个方法名到Dictionary保存,接着检查参数是否为空,不为空把参数赋值给那个函数名作为Key的Dictionary中保存,最后使用StringBuilder串起来赋值给result作为输出。
下面给出一个比较复杂的例子——自定义的XML创建器(仿Jeffery Zhao): public class XmlCreator : DynamicObject
{
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
//如果除了第一个节点是字符串,后面都是XElement对象,表明此节点是父节点
if (args[1] is XElement)
{
XElement root = new XElement(args[0].ToString());
//把子节点添加到父节点
for (int i = 1; i < args.Length; ++i)
{
root.Add(args[i]);
}
result = root;
}
//否则是子节点
else
{
//拷贝所有属性到数组:
string[] attributes = new
string[binder.CallInfo.ArgumentNames.Count];
上一篇:量表简介总结
下一篇:协信中心商业项目提案