是否可以使用属性覆盖方法?

时间:2012-03-11 01:07:13

标签: c# reflection methods attributes override

例如,是否可以使用'PetOwner'属性标记'Man'类,该属性会使用创建'Dog'对象的内容覆盖构造函数以及调用'Man'基础构造函数?

(并覆盖'Man的'GoForWalk()'方法以包含与他的狗的互动?)

我对Reflection非常陌生,对此很好奇所以我想我也可以问。 这是否涉及Reflection.Emit以某种方式?

我也看过this问题,但我不认为这完全与我的要求有关(我也不完全理解)。

感谢您的帮助! :)

编辑:This question看起来与我的目标类似

1 个答案:

答案 0 :(得分:2)

是和否,这取决于您实际想要实现的不同方面,因此更多信息可能会有所帮助。由于您询问有关反射的问题,因此我认为您希望使用自己的功能扩展现有库,但您的解释并不清楚。

.net Framework和C#允许不同的方法来覆盖代码/改变行为,但一切都取决于覆盖信息何时可用;在设计时( - >典型的OO构造),在编译步骤( - >面向方面编程)之后或在编译时( - >反射/动态特征)。

大多数情况下,反射是最后的手段,因为它本身就具有性能影响(当然,除了使用反射来读取属性之外,还需要创建其他代码并执行它)。 话虽这么说,Reflection.Emit确实是一种覆盖可访问方法的方法(通过发出一个具有相同名称和签名的方法)。