2012-03-11 76 views
3

例如,将有可能以纪念与“PetOwner”属性,它覆盖的构造函数的东西,创建了一个“狗”的对象,以及调用“人”的基础构造一个“人”类?是否可以使用Attribute来覆盖方法?

(并改写“人的‘GoForWalk()’方法,包括与他的狗互动?)

我是很新的思考,并很好奇这个,所以我想我可能也问。 这是否涉及Reflection.Emit以某种方式?

我也看了一下this的问题,但我不认为它完全涉及我所问(我也没有完全理解它)。

感谢您的帮助! :)

编辑:This question类似于什么我要去我的

+1

你真的想要做什么?它似乎是一个[XY问题](http://www.perlmonks.org/?node_id=542341) – 2012-03-11 01:29:31

+0

我正在考虑使用它来创建一种镜像Mogre中winforms控件的可视部分的方法,但是我发现了另一个很好地工作的方式。现在(如我所说),我只是好奇这是否可能 – Aralox 2012-03-11 01:43:01

+0

为什么你想使用自定义属性,而不是实现适当的对象模型?我并不是说这个属性无法在对象模型中提供帮助,但是与IL编写者一起工作是沉重而丑陋的。 – 2012-03-11 01:53:50

回答

2

是,也不是,它取决于你actualy要实现不同的方面,所以更多的信息可能会有所帮助。既然您询问了反思,我就会得到这样一种印象,即您已经有了自己的功能扩展的现有库,但是从您的解释中不清楚。

.NET Framework和C#允许重写代码/改变行为方式不同,但一切都取决于当重写信息,请访问; ( - >典型的OO构造),在编译步骤( - >面向方面的编程)或编译时( - >反射/动态特征)之后。

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

+0

谢谢Dirk :)你也让我想起了另一个有趣的话题 - 面向方面的编程 – Aralox 2012-03-11 10:01:45