(一)dlr
C#4的动态功能是Dynamic Language Runtime(动态语言运行时,DLR)的一部分。DLR是添加到CLR的一系列服务。
(二)dynamic类型
dynamic类型允许编写忽略编译期间的类型检查的代码。编译器假定,给dynamic类型的对象定义的任何操作都是有效的,在运行之前编译器不会检测是否存在错误。
例子:
dynamic person = "人";string firstName = person.FirstName;
这两行代码能够通过编译器编译,但是点击运行后会报错:

需要注意的是,dynamic类型虽然很有用,但是它是有代价的。
(三)包含DLR ScriptRuntime
给应用程序添加脚本编辑功能,并给脚本传入数值和从脚本传出数值,是应用程序可以利用脚本完成工作。
(四)DynamicObject和ExpandoObject
从DynamicObject中派生或者使用ExpandoObject可以创建自己的动态对象。
使用DynamicObject派生创建动态对象,需要重写3个方法TrySetMembe()、TryGetMember()和TryInvokeMember()。
使用ExpandoObject与DynamicObject进行派生的区别在于不用重写方法。
例子:
class Program
{
static void Main(string[] args)
{
Func<string, string, string> getFullName = (f, l) => { return f + " " + l; };
dynamic byexobj = new ExpandoObject();
byexobj.FirstName = "李";
byexobj.LastName = "四";
byexobj.GetFullName = getFullName;
Console.WriteLine(byexobj.GetType());
Console.WriteLine(byexobj.GetFullName(byexobj.FirstName, byexobj.LastName));
Console.WriteLine("=====================");
dynamic dyobj = new MyDynamicObject();
dyobj.FirstName = "张";
dyobj.LastName = "三";
dyobj.GetFullName = getFullName;
Console.WriteLine(dyobj.GetType());
Console.WriteLine(dyobj.GetFullName(dyobj.FirstName, dyobj.LastName));
Console.ReadKey();
}
}
public class MyDynamicObject : DynamicObject
{
Dictionary<string, object> dynamicData = new Dictionary<string, object>();
public override bool TrySetMember(SetMemberBinder binder, object value)
{
dynamicData[binder.Name] = value;
return true;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
bool success = false;
result = null;
if (dynamicData.ContainsKey(binder.Name))
{
result = dynamicData[binder.Name];
success = true;
}
else
{
result = "未找到该属性的值";
success = false;
}
return success;
}
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
dynamic method = dynamicData[binder.Name];
result = method((string)args[0],(string)args[1]);
return result != null;
}
}运行以上代码,结果如下:

以上就是C#高级编程 第十二章 动态语言扩展 的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号