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의 파생 클래스에 제약 조건을 쓰는 방법은 무엇입니까?
'MustInherit'으로'ObjectBase'를 선언하십시오. 그런 식으로'상속받은 클래스 '를 적용합니다 :'Public MustInherit Class ObjectBase' ... 'SomeOtherClass' : 'Public Property SomeProperty as ObjectBase' –
@Jay Walker 실제로 제 실제 코드에서 ObjectBase가 여전히 Property1 속성을 가지고 있지 않기 때문에이 작업을 수행하고 작동하지 않습니다. 나는 MustInherits가 그것을 인스턴스화하기 위해 하나를 차단하는 것 외에는 아무것도하지 않는다고 생각한다. – Andrei