私は2つのクラスを持っています。 ClassAはClassBを使用します。私は任意のClassBオブジェクトのリスト(つまり、ClassB、ClassB両方を同じリストに格納することができるようにしたい)。継承されるタイプのプロパティ/メソッドの新しいバージョンへのアクセス
Iは、(簡略化)ようなので、これを実装している:
ClassB
{
public object Thing {get; set;}
AssignThing(object thing) {Thing = thing;}
}
ClassB<T> : ClassB
{
...
}
ClassA
{
public List<ClassB> list {get; set;}
...
}
静止することができるながらしかし、私は、Tが何であるかに基づいて、ClassBのは、その天然型Tとしてシングを格納できるようにしたいと思いそのClassBにキャストせずに、リストからClassAのT ThingとT AssignThingにアクセスします。私はにClassAからシングにアクセスすると、それはClassB
のシングのバージョンではなく、ClassB<T>
年代を見なければ(クイックウォッチを経由して)表示され、しかし
ClassB<T> : ClassB
{
public new T Thing {get; set;}
AssignThing(T thing) {Thing = thing;}
}
、私は当初、ClassBのための次の実装を試してみましたAssignThing
はClassB
のバージョンも使用しています。明らかに、私は異なるシグニチャーであるため、(新しいものではなく)オーバーライドできません。
私は相続性/多型性について少しばかり思っています。私はC#で可能なことをしようとしていますか?
'new'プロパティはprivateです。そのクラスだけがそのプロパティを使用できます。基本クラスから継承したプロパティを実際に隠すことはできません。そのため、他のクラスやそれ以上の派生クラスがその名前のプロパティにアクセスしようとすると、基本クラスから継承したプロパティのみが表示されます。 'new'は非常に特定のシナリオでのみ有用ですが、使用すべき解決策はほとんどありません。なぜあなたがそれを代わりに使用したいのかを教えてくれたら、誰かが 'new'を使うよりもうまくやる方法を教えてくれるかもしれません。 –
私はコードのパターンに従った例を作成していましたが、疲れていました。それを指摘してくれてありがとう、それは問題ではありません。私はその例を修正した。 – Travis
[mcve]を作成します。 –