나는 다음과 같은 클래스가 :업 캐스팅 도우미 방법?
class Alpha
{
}
class Beta : Alpha
{
}
class Gamma : Beta
{
}
class Epsilon : Beta
{
}
을 그리고 매개 변수로 데리고 어디 몇 가지 방법이 있습니다
void Receiver(Gamma gamma);
void Receiver(Epsilon epsilon);
void Receiver(Beta beta);
void Receiver(Alpha alpha);
내가 여기 조금 특별한 뭔가가 필요합니다.
모든 메서드에 Alpha 개체를 전달할 수 있기를 원하지만 Beta
에서 상속되는 형식의 개체를받을 수있는 void Receiver(Beta beta);
과 같은 메서드를 사용하고 싶지 않습니다 (즉, 최악의 경우 Exception
을 발생시킵니다. Gamma
또는 Epsilon
개체가 전달됩니다.
을 나는 가장 충분한 제네릭 방식으로이를 구현 할 수 있습니까?
가 내가 처음 부분에 대한 생각 가, 내가 upcasting을 위해 할 수있는 방법이 있어야합니다, 같은 예 :
class Alpha
{
public T Upcast<T>() where T : Alpha
{
// somehow return a T
}
}
여기에있는 문제는 모든 레벨에서 작동하도록하고 싶습니다. 예를 들어 "업 캐스팅"을 할 수 있기를 원합니다. Beta
도 있습니다.
두 번째 부분은 내가 필요한 형식 위에있는 개체를 전달하기 때문에 더 쉬워야합니다.
때문에 이런 일이 충분해야합니다
void Receiver(Epsilon epsilon)
{
// if epsilon inherits from Epsilon, throw.
}
당신이 내 문제의 첫 번째 부분으로 나를 도와 드릴까요? 감사!
매개 변수로'Base'를 받아들이고'Derived'와 함께 작동하지 않는 메소드가 있다면 클래스 디자인이 잘못되었습니다. 그것이 당신이 고쳐야 할 것입니다. – Jon
이것은 리플렉션을 사용하여 쿼리 문자열 매개 변수로 속성을 구문 분석하는 특수한 경우를위한 것입니다. 파생 클래스를 수용하고 싶지는 않습니다. 해당 API 호출에 잘못된 쿼리 문자열 매개 변수가 발생하는 속성을 포함 할 수 있기 때문입니다. – bevacqua
나는 모든 것이'봉인되어야한다 '고해도 나는 당신의 요점을 알고있다. 그러나 여전히 나에게 중요한 것은 기막힌 방법이다. – bevacqua