我开发了一个VB.NET库(部分是在C#上开发的),它很大程度上依赖于从一个抽象的泛型基类继承而来,我正试图找出最佳实践.我不得不使用框架3.5来做到这一点.
Public MustInherit Class MyBaseClass(Of T)
Public Whatever As T
End Class
Public Class MyDerivedClass
Inherits MyBaseClass(Of String)
Private _myProperty As String
Public Property MyProperty As String
Get
Return _myProperty
End Get
Set(value As String)
_myProperty = value
End Set
End Property
End Class
Run Code Online (Sandbox Code Playgroud)
我将.tlb文件作为VBA中的引用(使用Excel)附加,并运行以下代码:
Dim m As New VBtoVBA.MyDerivedClass
m.MyProperty = "foo"
Run Code Online (Sandbox Code Playgroud)
我得到错误"运行时错误430:类不支持自动化或不支持预期的接口".
另一方面,我将第一行更改为:
Public MustInherit Class MyBaseClass
Public Whatever As String
End Class
Public Class MyDerivedClass
Inherits MyBaseClass
Run Code Online (Sandbox Code Playgroud)
VBA脚本有效.因此,我认为问题在于泛型(也在其他来源中有记录).但是,删除我的库的通用功能是不可能的.我能想到的"最佳"解决方法是编写包含MyDerivedClass作为字段的第三个类,并将其作为非泛型接口:
Public Class MyDerivedClassString
Private _innerObj As New MyDerivedClass
Public …Run Code Online (Sandbox Code Playgroud)