2010-03-11 6 views

답변

2

대신 당신은 당신의 유형을 정의 할 수 있습니다.

class Example : Y<int,int> { 
... 
} 

이 경우 Y 유형은 동일한 인터페이스를 두 번 구현하지만 동일한 메소드의 다른 구현을 가질 수 있습니다. 이것은 구현과 호출 모두에서 메소드 Tx에 대해 컴파일러에서 해결할 수없는 모호성을 만듭니다.

예를 들어 다음과 같은 문제가 발생합니다. 당신은 통일 오류를 무시하면

class OtherExample<A,B> : Y<A,B> { 
    B Tx(A x) { 
    Console.WriteLine("Top method in the file"); 
    return default(B); 
    } 
    A Tx(B x) { 
    Console.WriteLine("Bottom method in the file"); 
    return default(A); 
    } 
} 

Y<A,B>의 법적 구현입니다. 이제 사용자가 다음을 수행했다고 상상해보십시오.

var v1 = new OtherExample<int,int>(); 
v1.Tx(42); 

이 시나리오에서 정확히 어떤 현상이 발생합니까? 컴파일러 또는 CLR이 모호성을 어떻게 해결할 수 있습니까? 동일한 서명을 가진 메소드를 동일하게 명명했습니다.

6

첫 번째 이유 :

+0

간단한 컴파일 타임 오류가 발생합니다. –

+0

- 당신이 비 감각적 인 인스턴스 생성을한다면 당신은 그것을 요구했지만 그것은 유용한 패턴을 허용하지 않는 것보다 낫다는 철학입니다. 즉, 악용 될 수 있기 때문에 도구를 버리지 마십시오. 악용은 정적으로 검사하고 거부 할 수 있습니다. –

관련 문제