2008-11-08 7 views
2

VB.Net2005유형 매개 변수는 예선

단순화 된 코드로 사용할 수 없습니다. 덧붙여, OuterBase의 공유 메서드를 호출 할 때도 같은 오류가 발생합니다.

"works"행은 작동하지만 실제로 12 개의 ChildClass 클래스가 있습니다.

"failsAsExpected"행은 generics를 통해 각 ChildClass가 고유 한 Inner 클래스를 가짐을 보여줍니다.

내 질문 : 거기에 변수를 가져올 수있는 CollectionClass 클래스에서 Member.Inner 형식으로 정의 된? 컴파일러가 따라 올 수없는 중요한 차이점은 무엇입니까?

는 (나는 결국 형 PARAM의 더미 객체를 생성하고 OuterBase에 정의 된 메소드를 호출하여 객체를 생성 할 수 있었다. 아니 깨끗한 방법.)

편집 2008년 12월 2일이를 만들기 위해 코드를 변경 두 개의 "기본"클래스가 일반적입니다.

답변

1
Dim succeeds as OuterBase.Inner 

.NET은하지 하지 가능하지 않으며 심지어 그물에 의미가 무엇을 당신이하려고하는 의미 템플릿 클래스와 형식 정의의 C++의 조합이있다.

1

ChildClass.InnerSomeOtherChildClass.Inner은 같은 유형입니다.

Imports System 

MustInherit Class InnerBase 
End Class 

MustInherit Class OuterBase 
    Class Inner 
     Inherits InnerBase 
    End Class 
End Class 

Class ChildClass 
    Inherits OuterBase 
End Class 

Class OtherChildClass 
    Inherits OuterBase 
End Class 

Class Test 
    Shared Sub Main() 
     Dim x as new ChildClass.Inner 
     Dim y as new OtherChildClass.Inner 

     Console.WriteLine(x.GetType()) 
     Console.WriteLine(y.GetType()) 
    End Sub 
End Class 

출력은 다음과 같습니다 : 다음은 짧지 만 완전한 프로그램은 입증의

는 "매개 변수화"중첩 클래스를 사용하여 달성하기 위해 노력하고 있었다 무엇
OuterBase+Inner 
OuterBase+Inner 

? 나는 이거나, 또는과 같이 시작할 수 없다고 생각합니다. 그냥 OuterBase.Inner을 사용하면됩니다.

이제 각각의 하위 클래스가 자체 중첩 클래스를 선언하는 경우 이는 상황이 달라질 것이며 제네릭이 도움이되지 않을 것입니다.

+0

물론, 당신 말이 맞습니다. 어떻게 든, OuterBase가 일반화 된 것으로 생각하는 코드를 잘못 읽었습니다. ChildClass : OuterBase를 만드는 것 + OtherChildClass와 다른 InnerClass : OuterBase + InnerClass. –