1つのメソッド、つまり1つのオブジェクトのコンテンツを同じタイプの別のオブジェクトにコピーする機能を備えたインターフェイスを作成しました(実際の機能は質問とは無関係です)。
public interface IDeepClonable
{
void DeepClone<T>(T other);
}
適切な実装に問題があります。
私が本当に望んでいるのは、このように実装することです(これは、IDeepClonableを実装するClassA内にあります)
public void DeepClone<ClassA>(ClassA other)
{
this.A = other.A;
}
ただし、「other」オブジェクトはコンパイラによってClassAのインスタンスとして認識されないため、これは機能しません(なぜですか?)
'タイプパラメータTの制約は、(...)インターフェイスメソッドと一致する必要があるため、これも機能しません。
public void DeepClone<T>(T other) where T : ClassA
{
this.A= other.A;
}
一般的な制約ではなくオブジェクトを取り込むようにインターフェイスを変更することですべての問題を解決できますが、より洗練された解決策を望んでいました。
インターフェイスをジェネリックインターフェイスに変えることでこれを解決することもできますが、そうすると、そのジェネリックインターフェイスにキャストする必要があります。