私は C++ テンプレート プログラミングから来ており、ジェネリックと非常に混同されることがあります。メソッド特化はないので、キャストでやってみました。ここに私が持っているものがあります:
public interface INonGen
{
void Get<T>(ref T value);
}
public interface IGen<U> : INonGen
{
}
public class Gen<U> : IGen<U>
{
private U u;
public void Get<T>(ref T value)
{
if (value is U)
{
value = (T) u;
}
else
throw new Exception();
}
}
これはコンパイルされません。
このキャストを作る方法はありますか?
これが必要な理由: C++ テンプレートでは、サポートされている型の特殊化と、例外をスローする特殊化されていないバージョンを作成します。
基本的な考え方は次のとおりです。ジェネリック メソッドを持つ非ジェネリック インターフェイス。正しい型を使用して値を取得しようとすると機能するはずですが、間違った型を使用しようとするとスローされる可能性があります。
タイプ セーフを維持する必要があるため、正しいタイプのインスタンス/値を返す必要があります。object に対するショートカットは受け入れられません。また、非ジェネリック インターフェイスで型を制約することもありません。
重複を避けるために、一般的な実装が行われます。複数の異なる型をサポートしたい (ただし、型の小さなセットのみ) が、クラスをインスタンス化する (および T の意味を定義する) ときにこれを決定する必要があります。非ジェネリック インターフェイスで任意の T を使用したアクセスを許可したい。つまり、インターフェイスで型のセットを明示的に指定したくありません。