2013-06-29 24 views
4

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?

+0

聲明'ObjectBase'爲'MustInherit'。這種方式你執行'繼承的類'需要在:公共MustInherit類ObjectBase' ... 然後在'SomeOtherClass': 'Public Property SomeProperty as ObjectBase' –

+0

@Jay Walker其實,在我真正的代碼中,我做到了這一點,它不起作用,因爲ObjectBase仍然沒有Property1屬性。我認爲MustInherits不會做任何其他事情,而是阻止一個實例化它。 – Andrei

回答

3
Public Class SomeOtherClass(Of T as {OnlyClassesWhichInherits(ObjectBase)}) 

您是否在尋找......這個? :)

Public Class SomeOtherClass(Of T As ObjectBase) 
+0

我認爲這是行不通的,因爲SomeProperty的類型爲ObjectBase,我試圖訪問ObjectBase派生類的屬性。這似乎有點不穩定,我不能說公衆SomeProperty作爲ObjectBase然後SomeProperty =新的Derived1Class,然後SomeProperty.Property =「字符串」,但基本上,這些確切的事情工作,如果我通過繼承SomeSessionOtherClass(Derived1Class)類型,但重要的是它的工作原理。謝謝! – Andrei

相關問題