0

特定のオブジェクトが、私が作成した汎用パラメータを取るインターフェイスを実装しているかどうかを確認しようとしています。

public interface ICaseCopier<T> where T : ModelElement 
{
    T Case1 { get; set; }
    T Case2 { get; set; }

    void CopyCase(T caseToCopy, T copiedCase);
}

私のオブジェクトの1つは、次のようなインターフェースを実装しています:

public class ProcessLoad : ElectricalLoad, ICaseCopier<ProcessCase>

ProcessCase は ModelElement の子です。ジェネリックのさまざまなパラメーターでそのインターフェイスを使用する多くのオブジェクトがあるため、それらを1つずつチェックすることは問題外です。

私が試したのはこれです:

ICaseCopier<ModelElement> copier = this as ICaseCopier<ProcessCase>;

しかし、次のエラーが表示されます。

Cannot convert source type 'ICaseCopier<ProcessCase>' to target type 'ICaseCopier<ModelElement>'

ProcessCase は ModelElement にキャスト可能です。

4

1 に答える 1

5

変換は安全ではないため、これを行うことはできません-もしそうなら、次のことができます:

public class OtherElement : ModelElement { }

ICaseCopier<ModelElement> copier = this as ICaseCopier<ProcessCase>;
copier.Case1 = new OtherElement();

これを行う唯一の方法は、インターフェイスを共変にすることです。これは、入力位置と出力位置の両方に現れるICaseCopier<T>ため、現在の形式では実行できません。T

于 2013-02-19T19:03:11.567 に答える