interface ISample
{
int Id { get; set; }
}
public class MyClass : ISample
{
public int Id
{
get;
set;
}
public string Name { get; set; }
}
上記は、インターフェイスISampleを実装するクラスです。ジェネリックを使用して、私は与えられた型のオブジェクトを別の型に変換するために以下のメソッドを追加しました。ジェネリックC#キャスト
どのように私は戻ってISampleがTResultはTSOURCEを実装どこTSOURCEとTResultはMyClassのですMyClassのオブジェクトに変換したいISampleオブジェクトを与えられているのと同じの逆を達成しないジェネリックを使用してprivate TResult Sample<TSource, TResult>(TSource source)
where TSource : TResult
{
return (TResult)(source);
}
。
'ISample'のインスタンスを持っている場合、実際にはそのインスタンスを' MyClass'のインスタンスであることを保証し、そのインタフェースを実装しているインスタンスではないからです。とにかく、なぜこの方法がありますか?シンプルな '(ISample)myInstanceOfMyClass'はあなたのために何をしますか? – HimBromBeere
'TSource'が' TResult'(そこに設定したもの)から継承すると、 'TSource'型のオブジェクトはすでに暗黙のうちに' TResult'にキャストダウンされている可能性があります。しかし、私はそれを逆にすると( 'TResult'は' TSource'を継承します)、変換が可能であることをいくらか保証することができると思います。少なくとも実行時例外の代わりにコンパイラエラーが発生します。 – Flater