나는 기본 클래스 및 인터페이스, 예를 구현하는 몇 가지 파생 클래스가있는 경우 :C# : 클래스를 런타임에 구현하지만 시간을 컴파일하지 않는 인터페이스로 캐스팅하는 방법이 있습니까?
public class BaseClass
{
}
public interface IInterface
{
void SomeMethod();
}
public class DerivedA : BaseClass, IInterface
{
public void SomeMethod()
{
// some implementation
}
}
public class DerivedB: BaseClass, IInterface
{
public void SomeMethod()
{
// some other implementation
}
}
을 그리고 나는 BaseClass로 필드가 관련이없는 클래스가 있습니다
public class UnrelatedClass
{
public BaseClass foo;
}
내 구현은 가정 제공을 foo 인터페이스를 구현하는 일부 파생 된 클래스가 있어야합니다 (하지만 난 그냥 그래서 그 클래스에 캐스팅 할 수 없습니다) 어떻게 든 IInterface 캐스팅 할 수 및 컴파일 오류를 생성하지 않고 foo.SomeMethod() 호출 할 수 있습니다. ?
PS-이 작업을 수행하는 데 정말로 둥근 방법이며 대신 "IInterface foo"필드를 사용해야하지만 Unity가 인터페이스 필드를 직렬화하지 않고 사용자 정의 관리자를 쓰지 않으려 고합니다. 노력하고있어.
는'BaseClass'가'SomeMethod'이 나던 :
BaseClass
이IInterface
를 구현하고 파생 클래스가 재정의 할 필요가있어서, 여기에 제안 된 디자인이다. 'IInterface'는 그것을 가지고 있습니다. 그래서'SomeMethod'를'BaseClass' 안에 넣지 않는 이유는 무엇입니까? '추상적'? – FCin왜'BaseClass'는'IInterface'를 구현하지 않습니까? –
'is' 키워드를 사용하여 다음을 확인하십시오 :'if (foo is IInterface) {...}' – CodingYoshi