예를 들어 다음 코드 스 니펫을 고려해보십시오.
Contract.Requires<CustomException>(arg !=null)
런타임 중에 다음 코드는 type의 예외를 throw합니다.CustomException
. 코드 계약서에서 Activator를 사용하여CustomException
또는 우리는 그것을 어떻게 사용합니까? 나는 다른 목적으로 비슷한 코드를 구현하려고한다.
에 따르면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>();
// ...
}
후자의 방법은 예를 들어 진짜 유형을 아직 모르고 리플렉션을 통해 먼저 검색하려고합니다. 리플렉션을 통해 인스턴스를 생성하려면 클래스가 매개 변수없는 생성자를 제공해야합니다. 그렇지 않은 경우에는이 부분을 참조하십시오.의문조언을 구하십시오.