【发布时间】:2012-07-06 18:50:22
【问题描述】:
在 Ruby 中,所有的类都是永远开放的。几乎任何时候都可以将新行为添加到任何类中。有没有办法在 VB.NET 中做到这一点?
例如,如果我希望现有应用程序(大型应用程序)中的所有 DataRows 都采用新行为,该怎么办。我意识到我可以创建一个从 DataRow 继承的自定义行类,但继承不是我所追求的。这将涉及大量返工,以确保在所有地方都实例化行,我们是从我们的自定义行类中实例化的。
关于如何做到这一点,我有两个粗略的想法:
我突然想到方面 (AOP) 可以在这里工作。 Is there a way to layer behavior on top of existing methods?
这里的主要目标是不必对现有代码进行任何大型改造。系统实际上应该忽略这些分层的行为/方面。它应该对代码库进行最小的更改。
目前,我们使用装饰器类实现分层方面。问题是,系统知道本地行和行装饰器对象之间的区别。我希望能够传递系统认为是本机行的东西。同样,系统不需要注意应用于行的装饰。它应该认为它有一行,而不是一些特殊的装饰器。
具体来说,我想装饰一行的默认 set Item(colName) 属性,以便我可以修改传入的值。
【问题讨论】:
-
我遇到的一个问题是 VB.NET 没有对方面的原生支持。我发现了许多 AOP 框架。 IMO,语言应该原生支持添加方面。
标签: vb.net interface metaprogramming aop decorator