在VB.NET中运行时修改属性代码

时间:2012-05-15 20:11:15

标签: vb.net reflection

假设我有以下课程,

 Public Class Base

      Public Event PropertyChanged()

      Sub New()
           .....
      End Sub
 End Class

 Public Class Other
      Inherits Base

      Public Property X As String
 End Class

如果我想说,改变自动属性X的代码定义(在运行时,可能在Sub New中),这样我就可以抛出PropertyChanged事件,我怎么能去做是什么?

编辑:似乎Postsharp是一个可用的工具,可以实现我正在探索的功能,但我希望我的问题更具学术性而不是实用性。那么,我怎样才能在编译时或运行时自己实现代码注入?

2 个答案:

答案 0 :(得分:2)

我猜您正在寻找AOP。一个非常好的技术,恕我直言在dotnet平台上并不成熟。我相信,如果我错了,请纠正我,Postsharp是最着名的AOP框架。对于生产而言,这不是免费的;安装和播放(可能还有F / OSS)是免费的。另请查看this post以获取更多信息。

答案 1 :(得分:2)

答案很简单:你做不到。加载类型后,您无法更改其代码。

如果你想在不为每个属性编写相同代码的情况下实现INotifyPropertyChanged,有几种方法。

其中一个是在C#中创建属性MustOverrideabstract),然后在运行时创建另一个类,在运行时实现它(例如使用Castle DynamicProxy)。

另一个是使用AOP在编译后(但在运行之前)使用像PostSharp这样的代码重写代码。

另请查看Implementing INotifyPropertyChanged - does a better way exist?,了解其他选项。