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爲對象(UPDATE1:現在我現在這個功能被命名爲通用類)。如果我將SomeProperty聲明爲ObjectBase,那麼編譯器對SomeProperty = New DerivedClass沒有任何問題,但它抱怨Property1不是ObjectBase的成員,這是真的,但它仍然可以作爲Object的SomeProperty。 這意味着我感興趣的行爲已經存在於.NET中,並且它在Object類(Update1:Generic Classes)中實現。
如何寫一個約束派生類的ObjecBase?
聲明'ObjectBase'爲'MustInherit'。這種方式你執行'繼承的類'需要在:公共MustInherit類ObjectBase' ... 然後在'SomeOtherClass': 'Public Property SomeProperty as ObjectBase' –
@Jay Walker其實,在我真正的代碼中,我做到了這一點,它不起作用,因爲ObjectBase仍然沒有Property1屬性。我認爲MustInherits不會做任何其他事情,而是阻止一個實例化它。 – Andrei