문제

.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();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top