关于ZAKER 融媒体解决方案 合作 加入

在 .NET IL 中 , 可以直接将接口的属性和事件作 .

CocoaChina 11-11

在我的反射性 C# 代码中 , 我遍历接口上的方法并发出一个类 , 该类 a ) 声明为实现接口 b ) 具有 GetMethods ( ) 返回的所有实现的方法 .

var methods = typeof ( T ) .GetMethods ( ) ; // T is interfaceforeach ( var methodInfo in methods ) { var parameters = methodInfo.GetParameters ( ) .Select ( p => p.ParameterType ) .ToArray ( ) ; var method = typeBuilder.DefineMethod ( methodInfo.Name, MethodAttributes.Public | MethodAttributes.Virtual, methodInfo.ReturnType, parameters ) ; ... // Emit IL

这不仅创建方法 , 还创建属性和事件作为方法对 ( get_ set_ / add_ remove_ ) .

动态创建的类被 CLR 接受为接口的实现 , 并且调用对象的属性和事件 ( 作为接口广播 ) 可以正常工作 . 但是 , 在类型构建器中有 DefineProperty 和 DefineMethod. 如果仅使用 DefineMethod, 使用 ildasm 可以确认声明中是否缺少 " .property". 将接口的属性和事件当作 " 公正 " 方法来实现是否调皮?还是完全合法?

最佳答案

Is it naughty to implement an interface ’ s properties and events as if

they were ‘ just ’ methods?

是的 . 您将无法将属性用作属性 ( 使用动态属性时 ) .

以上内容由"CocoaChina"上传发布 查看原文
相关标签 属性接口事件