2011-04-06 6 views
10

C#, Type이 인스턴스화 될 수 있는지 어떻게 알 수 있습니까? Activator.CreateInstance 예외를 피하려고합니다.형식이 인스턴스화 가능한지 알아보십시오

내 현재 메서드는 type.IsClass && !type.IsInterface이지만 추상 클래스 등에서도 실패 할까봐 걱정됩니다. type.TypeInitializer == null도 검사 할 생각 이었지만 확실하지는 않습니다.

Type이 인스턴스를 생성 할 수 있는지를 알아낼 수있는 가장 간단하고 효율적인 방법은 무엇입니까?

+4

'type.IsAbstract'가 있습니다. –

+1

"안전"을 위해 GetConstructor()에 의해 반환 된 ConstructorInfo 개체의 IsPublic 및 유사한 속성을 확인해야합니다. 나는 모른다. 나는 묻고있다. –

답변

7

다른 많은 트랩이 있습니다. 개인 또는 보호 된 생성자를 가질 수 있습니다. 또는 기본 생성자가 없을 수도 있고 특정 인수 유형을 사용하는 생성자 만있을 수도 있습니다. 걱정하지 않으면 Activator.CreateInstance()를 사용해서는 안됩니다. 임의로 객체를 생성하면 혼란 만 일으킬 수 있습니다. 어떤 유형의 부작용이 있는지 모릅니다. "FormatDisk"클래스를 피하십시오.

귀하의 친구는 예외이며 귀하의 가정이 잘못되었음을 알려줍니다. 의도적으로 .NET 프레임 워크가 도움이되는 것을 막지 마십시오.

+0

인터페이스에 대한 구현 사례를 만들고 있는데 그것에 대해 알고있다. 그래도 고맙습니다. – user664939

+0

우수하지만 예외에 대해 걱정할 필요가 없으며 실수로 추상 클래스를 만들지 않아도됩니다. 간단한 잘 알려진 이름으로 작업이 완료됩니다. –

+0

기본 생성자를 확인하는 방법은 무엇입니까? – user664939

11

IsAbstract을 고려하십시오. 정적 클래스뿐만 아니라 추상 클래스도 처리 할 수 ​​있습니다. 또한 확인하고 싶을 수도 있습니다 IsInterface

관련 문제