나는 몇 가지 기본 클래스와 그 클래스에서 파생 된 다른 클래스를 포함하는 클래스 라이브러리를 가지고있다. 이 클래스 라이브러리에서는 다형성을 활용하여 원하는대로 할 수 있습니다. 이제 소비하는 응용 프로그램에서 하위 클래스의 런타임 유형을 기반으로 일부 코드의 동작을 변경하려고합니다. 그래서 가정 다음확장 메서드를 통한 다형성?
public class Base { }
public class Child1 : Base { }
public class Child2 : Base { }
를 이제 (다음 클래스의 모든 소비 응용 프로그램에있는 클래스 라이브러리에서 참조 할 수 있습니다) 다음과 같이 무언가를 원하는 소비 응용 프로그램 :
public interface IMyInterface1 { }
public interface IMyInterface2 { }
public static class Extensions
{
public static void DoSomething(this Base myObj, Object dependency)
{
}
public static void DoSomething(this Child1 myObj, Object dependency)
{
IMyInterface1 myInterface = dependency as IMyInterface1;
if (myInterface != null)
{
//Do some Child1 specific logic here
}
}
public static void DoSomething(this Child2 myObj, Object dependency)
{
IMyInterface2 myInterface = dependency as IMyInterface2;
if (myInterface != null)
{
//Do some Child2 specific logic here
}
}
}
UPDATE :이 작동하지 않습니다
. 항상 기본 클래스의 확장 메서드를 호출합니다. 거기에 내가 이렇게하고 런타임 형식을 명시 적으로 확인하지 않아도되는 다른 방법이 있습니까? 그 이유는 Base
에서 파생 된 더 많은 클래스가 추가 될 수 있고 해당 확장 메서드가 다른 외부 어셈블리에서 올 수 있기 때문입니다.
미리 감사드립니다.
왜 당신이 다음 필요한 경우 무엇이 잘못되었는지의 세부 사항을 물어 먼저 그것을 시도하지? –
괜찮습니다. – Kassem
그게 작동하지 않습니다; 확장 메서드가 정적으로 디스패치됩니다. – SLaks