는 다음과 같은 코드를 가지고 :방법 과부하가 아닌 일반적인 방법
The type 'DerivedClassA1' cannot be used as type parameter
'TBaseClassB' in the generic type or method
'Operations.Method<TBaseClassB>(TBaseClassB)'.
There is no implicit reference conversion from 'DerivedClassA1'
to 'BaseClassB'.
그것은 나타납니다 라인은 다음과 같은 오류에 // Compilation error
결과를 표시
class BaseClassA { }
class DerivedClassA1 : BaseClassA { }
class BaseClassB { }
class DerivedClassB1 : BaseClassB { }
static class Operations
{
public static BaseClassA Method(BaseClassA baseA)
{
//...
return baseA;
}
public static TBaseClassB Method<TBaseClassB>(TBaseClassB baseB)
where TBaseClassB : BaseClassB, new()
{
//...
return baseB;
}
class Program
{
static void Main(string[] args)
{
BaseClassA baseA = new BaseClassA();
DerivedClassA1 derivedA1 = new DerivedClassA1();
DerivedClassB1 derivedB1 = new DerivedClassB1();
baseA = Operations.Method(baseA);
derivedA1 = Operations.Method(derivedA1); // Compilation error
derivedB1 = Operations.Method(derivedB1);
}
}
}
을 해당 메서드 오버로드는 인수가 DerivedClassA1
인 경우 Operations.Method(BaseClassA)
과 반대로 Operations.Method<TBaseClassB>(TBaseClassB)
메서드 오버로드를 선택합니다. 그것은 내가 기대하는 것과 반대입니다. 이유가 무엇인가요? 내가 뭔가 잘못하고 있는거야? 거기에 대안/올바른 방법을 달성 내가 원하는 무엇입니까 Method(BaseClassA)
메서드를 호출하는 것입니다 과부하.
예제 코드는 에서 작동하는 일부 실제 코드의 단순화 된 코드입니다. 예제가 고쳐 졌을 경우 사과드립니다.