1

예를 들어 다음 코드 스 니펫을 고려해보십시오.

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

런타임 중에 다음 코드는 type의 예외를 throw합니다.CustomException. 코드 계약서에서 Activator를 사용하여CustomException또는 우리는 그것을 어떻게 사용합니까? 나는 다른 목적으로 비슷한 코드를 구현하려고한다.

1 답변


0

에 따르면Microsoft 참조 원본, 당신이 참조하는 메소드는 다음과 같이 구현됩니다 :

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>();
    // ...
}

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

연결된 질문


관련된 질문

최근 질문