2013-06-29 2 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를 선언하는 것입니다 (갱신 1 : 지금은 이제이 기능이라는 일반적인 클래스). SomeProperty를 ObjectBase로 선언하면 컴파일러에서 SomeProperty = New DerivedClass와 아무런 문제가 없지만 Property1이 ObjectBase의 멤버가 아니라 사실이지만 SomeProperty와 Object로 작동한다는 불만을 표시합니다. 이것은 내가 관심있는 행동의 종류가 .NET에 이미 존재하며 Object 클래스 (Update1 : Generic Classes)에서 구현되었음을 의미합니다.

ObjecBase의 파생 클래스에 제약 조건을 쓰는 방법은 무엇입니까?

+0

'MustInherit'으로'ObjectBase'를 선언하십시오. 그런 식으로'상속받은 클래스 '를 적용합니다 :'Public MustInherit Class 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 = New Derived1Class, SomeProperty.Property = "string"과 같이 ObjectBase로 Public을 말할 수는 없지만 기본적으로 Inherits SomeOtherClass (Derived1Class) 상속을 통해 유형을 전달하면이 정확한 작업이 작동하지만 중요한 것은 그것이 작동한다는 것입니다. 고맙습니다! – Andrei

관련 문제