2016-07-16 3 views
1

가, 다음 코드를 실행하는 동안 는 예를 들어

Contract.Requires<CustomException>(arg !=null) 

을 니펫을 고려해 계약, 다음 코드 유형 CustomException의 예외가 발생합니다. 코드 계약은 Activator를 사용하여 CustomException의 인스턴스를 만들거나 어떻게 사용합니까? 나는 다른 목적으로 비슷한 코드를 구현하려고한다.

답변

0

Microsoft Reference Source에 따르면, 당신이 참조하는 방법은 다음과 같이 구현합니다 :

public static void Requires<TException>(bool condition) where TException : Exception 
{ 
    AssertMustUseRewriter(ContractFailureKind.Precondition, "Requires<TException>"); 
} 

당신이 볼 수 있듯이, 일반 TException 형식 매개 변수에 대한 모든 기능을 함께 없다. 이는 컴파일 후 ccrewrite.exe이 처리하기 때문입니다. 당신의 제네릭 형식 매개 변수에 new() 제약 조건,

첫째 :

는 두 번째 질문에 관해서는, 당신은 항상 두 가지 다른 방법으로 지정된 유형의 인스턴스를 만들 수 있습니다

public static void CreateInstance<TClass>() where TClass : new() 
{ 
    TClass instance = new TClass(); 
    // ... 
} 

둘째, 반사를 통해 Activator를 사용하여 :

public static void CreateInstanceWithReflection<TClass>() 
{ 
    TClass instance = Activator.CreateInstance<TClass>(); 
    // ... 
} 

후자의 방법은 당신이 예 경우에 유용합니다 진짜 유형을 아직 모르고 리플렉션을 통해 먼저 검색하려고합니다. 리플렉션을 통해 인스턴스를 생성하려면 클래스가 매개 변수없는 생성자를 제공해야합니다. 그렇지 않은 경우에는 question을 참조하십시오.