VB.net 中的后期绑定和“最后机会”方法?

问题描述 投票:0回答:1

我有几个(非常旧且代码冻结的)VB.Net 类库,其中有数十个从单个基类派生的类,

cBaseRow
。子类主要是在 cBaseRow 中调用
GetValue
的属性集合,提供到 .xls 文件的 O-R 映射。所以人们可以:

Dim N As Double = myRentRow.RentValue

RentValue
GetValue("RentValue")
上调用
cBaseRow
,然后
.TryParse
将其发送至
Double
。简单的东西。

还有另一个名为

NoteRow
的类,可以通过
cBaseRow
上类似的方法访问:

Public Function GetNote(Tab As String, Row as Integer, Field As String) As String

...这样您就可以检索任何字段上的注释,例如:

Dim N as String = myRentRow. GetNote("Rent", myRentRow.RowNum, "RentValue")

原始库不包含这些值的属性。我想添加它们...

Dim N as String = myRentRow.RentValueNote

我知道我可以使用扩展在现有库上实现方法。但是有几十个类,几十个字段,并且该库被用在几十个具有不同子类的项目中。

我的问题:VB中有没有一种方法可以在基类上实现“捕获”此类调用的方法?

例如,在 Obj-C 中,我可以重写 cBaseRow 中的

objc_msgSend
方法,任何未实现的方法调用都将落入此方法,方法调用作为字符串。

.Net中有类似的功能吗?

或者还有其他方法来实现这个吗?

vb.net system.reflection
1个回答
0
投票

对于您的直接问题“.NET 中是否有类似的功能”,答案是“否”。

另一种方法可以让您获得大部分的帮助,那就是制作诸如后期绑定或反射之类的东西,您可以在其中制作一个采用字符串参数(可能还有

ParamArray
或显式参数数组)的扩展方法。 您甚至可以使用它,就像 Obj-C 版本的反向操作一样,并使用反射来查找实际类型的现有成员。 我可以看到这种方法的两个缺点:首先,与后期绑定一样,如果您有签名问题(参数的名称或类型/计数),它将在运行时而不是编译时显示;其次,众所周知,反射速度很慢,因此您需要尽可能多地记住并避免在性能关键的路径上进行操作。

© www.soinside.com 2019 - 2024. All rights reserved.