VB.NET2005
简化代码:
MustInherit Class InnerBase(Of Inheritor)
End Class
MustInherit Class OuterBase(Of Inheritor)
Class Inner
Inherits InnerBase(Of Inner)
End Class
End Class
Class ChildClass
Inherits OuterBase(Of ChildClass)
End Class
Class ChildClassTwo
Inherits OuterBase(Of ChildClassTwo)
End Class
MustInherit Class CollectionClass(Of _
Inheritor As CollectionClass(Of Inheritor, Member), _
Member As OuterBase(Of Member))
Dim fails As Member.Inner ' Type parameter cannot be used as qualifier
Dim works As New ChildClass.Inner
Dim failsAsExpected As ChildClassTwo.Inner = works ' type conversion failure
End Class
“失败”行上的错误消息在主题中,并且“Member.Inner”突出显示。顺便提一下,尝试调用OuterBase的共享方法时会出现同样的错误。
“作品”系列有效,但现实生活中有十几个(并且正在计算)的ChildClass课程。
“failedAsExpected”行显示,使用泛型,每个ChildClass都有自己独特的内部类。
我的问题:有没有办法在类CollectionClass中获取变量,定义为类型Member.Inner?编译器无法遵循的重要区别是什么?
(我最终能够通过创建param类型的虚拟对象并调用OuterBase中定义的方法来生成对象。不是最干净的方法。)
编辑2008/12/2更改的代码,使两个“基础”类通用。
答案 0 :(得分:1)
Dim succeeds as OuterBase.Inner
.net确实不拥有C ++的模板类和typedef的组合,这意味着你想要做的事情是不可能的,甚至在.net中也没有意义。
答案 1 :(得分:1)
ChildClass.Inner
和SomeOtherChildClass.Inner
属于同一类型。这是一个简短但完整的程序来演示:
Imports System
MustInherit Class InnerBase
End Class
MustInherit Class OuterBase
Class Inner
Inherits InnerBase
End Class
End Class
Class ChildClass
Inherits OuterBase
End Class
Class OtherChildClass
Inherits OuterBase
End Class
Class Test
Shared Sub Main()
Dim x as new ChildClass.Inner
Dim y as new OtherChildClass.Inner
Console.WriteLine(x.GetType())
Console.WriteLine(y.GetType())
End Sub
End Class
输出结果为:
OuterBase+Inner
OuterBase+Inner
你想通过使用“参数化”嵌套类来实现什么?我怀疑 它不会按照你想要的方式工作,或只需使用OuterBase.Inner
开始就可以实现它。
现在,如果您的每个子类都声明了自己的嵌套类,那将是一种不同的情况 - 而且泛型不会帮助您。