1

たとえば、次のコードスニペットを考えてください。

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

実行時に、次のコードはtypeの例外をスローしますCustomException。コードコントラクトはActivatorを使用してのインスタンスを作成しますか。CustomExceptionそれともどうやって使うのですか。私は私のコードにも同様のものを他の目的のためにも実装したいと思います。

1 답변


0

によるマイクロソフトの参照資料あなたが参照するメソッドは、次のように実装されています。

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

お分かりのように、ジェネリックに機能的な関連はありません。TException型パラメータそれの訳はccrewrite.exeコンパイル後にこれを処理します。

2番目の質問に関しては、常に2つの異なる方法で特定のタイプのインスタンスを作成できます。

まず、new()ジェネリック型パラメータに対する制約:

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

第二に、リフレクションを使ってActivator

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

後者の方法は、たとえば本当のタイプをまだ知らないで、最初にリフレクションでそれを検索したいです。リフレクションを介してインスタンスを作成するには、クラスにパラメータのないコンストラクタを提供する必要があることにも注意してください。そうでない場合は、こちらを参照してください。質問アドバイスのために。

リンクされた質問


関連する質問

最近の質問