2017-09-22 2 views
0

으로 내가 인터페이스와 클래스 다음있어 :C# 제네릭 형식 매개 변수

public abstract class A {} 
public abstract class B<T> : IType<T> 
{ 
    public T Value { get; set; } 
} 

public interface IType<T> 
{ 
    T Value { get; set; } 
} 

public class C : B<String>, IType<String> { } 
public class D : B<Int32>, IType<Int32> { } 

어떻게 C 또는 D는, 메소드 매개 변수로 전달할 수 A를 사용하지 않고? 매개 변수 유형은 IType<T> 또는 B<T>이어야합니다.

불행히도 generics에 대한 새로운 내용이 있으므로 도움을 주시면 감사하겠습니다. 감사!

편집

내가 달성하기 위해 노력하고있어 나는 그 방법으로 C 또는 D를 통과 할 수 있도록 다음 (컴파일되지 않습니다)

public void SetB(B<T> Type) 
{ 
    //Do stuff... 
} 

같은 것입니다.

+0

현재 컴파일하지 않은 내용이 무엇인지 이해하기가 어렵습니다. 코드를 컴파일 할 수 있도록 질문을 업데이트 한 다음 할 일을 설명하는 빠른 의사 코드 스 니펫을 추가 할 수 있습니까? 'ITYPE '인 "'B '또는'ITYPE '"'B '이기 때문에 –

+0

가되고 동일합니다'' ITYPE, 그래서 단순히 매개 변수 유형으로'ITYPE 을'사용하여 어떤 문제가 있습니까? – fuglede

+0

@DavidL 감사합니다. 내 질문을 업데이트했습니다. – Nordrassil

답변

1

귀하의 방법은 generic 일 수도 있습니다.

public void MyMethod<T>(IType<T> arg) 
{ 
    throw new NotImplementedException(); 
} 

이렇게 부를 수 있습니다.

MyMethod(new C()); 
MyMethod(new D()); 
+0

감사합니다! 그것도 간단했다 :) – Nordrassil

+0

@Nordrassil : MyMethod (new C())를 호출 할 수도있다. 제네릭 형식 인수를 생략 할 수 있으며 컴파일러는 인수에서 얻은 의미를 파악하려고 시도하지만 항상 그렇게 성공적으로 수행 할 수는 없습니다. –

+0

@EricLippert 유용한 힌트를 주셔서 대단히 감사합니다! – Nordrassil

관련 문제