1
class BaseItem { }

class DerivedItem : BaseItem { }

interface IInterface<T> where T is BaseItem { }

class RealizedInterface<T> : IInterface<T> { }

RealizedInterface<BaseItem> rb;
RealizedInterface<DerivedItem> rd = new RealizedInterface<DerivedItem>;

次の行に示すようにキャストする方法はありますか:

rb = rd;   

rdにキャストする方法を誰か教えてもらえますrbか?

実はBaseItem自体も一般化されたクラスなのですが、質問を簡単にするために書きませんでした。class BaseItem<U,K> / DerivedItem<U,K>

私が直面している本当の問題を理解できる人にとっては、これです。

IShape<IBaseShape<long>, long> shape;

ここに宣言されたオブジェクトがあります

IShape<ITriangle<long>, long> triangle =new Shape<ITriangle<long>,long>(); //Shape derived from IShape

shape = triangle; //here is the problem.

ITriangle は IBaseShape から派生します。どんな助けでも本当に感謝しています。

結果: out キーワードを実装しないことにしました。私の場合、それはあまり価値をもたらしません(これは数か月にわたって進行中のプロジェクトであり、いたるところにジェネリックがいっぱいです)。具体的には、 inキーワードを使用してインターフェイスにセッターを実装し、out キーワードを使用してゲッターを実装することを検討している場合加えて、out キーワードで装飾されたインターフェイス内でジェネリックを使用することによって作成されたキャストの問題について、私はそれについて 2 回考えました。全体として、最初からそれらを使い始めれば便利かもしれませんが、そうでなければ、あなたが思っているよりも多くの問題を引き起こす可能性があります.

4

3 に答える 3