IsAssignableFrom과 GetInterface의 차이점은 무엇입니까?
-
01-07-2019 - |
문제
.Net에서 리플렉션을 사용하면 다음과 같은 차이점이 무엇입니까?
if (foo.IsAssignableFrom(typeof(IBar)))
그리고
if (foo.GetInterface(typeof(IBar).FullName) != null)
어느 것이 더 적절합니까? 그 이유는 무엇입니까?
언제 둘 중 하나가 실패할 수 있습니까?
해결책
유형이 주어진 인터페이스를 구현하는지 확인하려는 경우에는 어느 쪽이든 괜찮지만 IsAssignableFrom()은 GetInterface()보다 더 많은 내부 검사를 수행하므로 GetInterface()가 더 빠를 것입니다.어쨌든 다른 두 메서드 모두 사용하는 것과 동일한 내부 목록을 반환하는 Type.GetInterfaces()의 결과를 확인하는 것이 훨씬 더 빠를 것입니다.
다른 팁
내부 클래스를 처리하는 방법에는 차이가 있습니다.다음 수업을 들어보세요:
public interface IFoo
{
}
internal class Foo: IFoo
{
}
그러면 하나의 항목 목록이 제공됩니다.
var types = typeof(IFoo).Assembly.GetTypes()
.Where(x => x.GetInterface(typeof(IFoo).FullName) != null)
.ToList();
반면에 빈 목록이 제공됩니다.
var types = typeof(IFoo).Assembly.GetTypes()
.Where(x => x.IsAssignableFrom(typeof(IFoo))
.ToList();
제휴하지 않습니다 StackOverflow