【问题标题】:How to declare property as generic type constrained to classes that inherits a base class?如何将属性声明为受限于继承基类的类的泛型类型?
【发布时间】:2013-06-29 02:22:49
【问题描述】:

Update1:​​在此更新之前,它有点重复,但我认为现在它已经足够具体了,并且该重复根本没有回答这个编辑过的问题。 好的,所以我发现我必须使用带有约束的通用类。问题仍然存在,关于如何仅限制从类派生的类。

实际上,我希望能够声明某种抽象属性,其类型在派生类中声明,但仅限于在原始类中声明的派生类型。让我们举个例子:

Public Class ObjectBase
End Class

Public Class Derived1Class
inherits ObjectClass
Public Property1 as String
End Class

Public class Derived2Class
inherits ObjectClass
Public Property2 as string
End Class

Public Class SomeOtherClass(Of T as {OnlyClassesWhichInherits(ObjectBase)})
Public Property SomeProperty as T
End Class

Public Class SomeOtherDerivedClass
inherits SomeOtherClass
Sub New()
SomeProperty = New Derived1Class
SomeProperty.Property1:="this should be valid"
End Sub
End Class

我知道实现这一点的唯一方法是将 SomeProperty 声明为 Object(更新 1:现在我将此功能命名为泛型类)。如果我将 SomeProperty 声明为 ObjectBase,编译器对 SomeProperty=New DerivedClass 没有问题,但它抱怨 Property1 不是 ObjectBase 的成员,这是真的,但它仍然可以将 SomeProperty 作为对象。 这意味着我感兴趣的那种行为已经存在于 .NET 中,并且在 Object 类中实现(Update1:​​Generic Classes)。

如何为 ObjecBase 的派生类编写约束?

【问题讨论】:

  • ObjectBase 声明为MustInherit。这样您就可以强制执行“继承类”要求,如:Public MustInherit Class ObjectBase ... 然后在SomeOtherClassPublic Property SomeProperty as ObjectBase
  • @Jay Walker 实际上,在我的真实代码中,我这样做了,但它不起作用,因为 ObjectBase 仍然没有 Property1, 属性。我认为 MustInherits 除了阻止一个实例化它之外没有其他任何作用。

标签: .net vb.net


【解决方案1】:
Public Class SomeOtherClass(Of T as {OnlyClassesWhichInherits(ObjectBase)})

您也许正在寻找……这个? :)

Public Class SomeOtherClass(Of T As ObjectBase)

【讨论】:

  • 我认为这行不通,因为 SomeProperty 将是 ObjectBase 类型,我会尝试访问 ObjectBase 派生类的属性。我不能说 public SomeProperty as ObjectBase 然后 SomeProperty=New Derived1Class 然后 SomeProperty.Property="string" 似乎有点不一致,但基本上,如果我通过 Inherits SomeOtherClass(Derived1Class) 传递类型,这些确切的东西会起作用,但是重要的是它有效。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-02-20
  • 1970-01-01
相关资源
最近更新 更多