3

複数のクラス (すべて iBlocks インターフェイスを実装する) のオブジェクトを含む iBlocks という名前のインターフェイスの配列があります。それが可能かどうか、またはこの配列内の特定のクラスのすべてのオブジェクトのインターフェイスでカバーされていないメソッドを呼び出す必要がある状況を処理する方法を考えています。例えば:

iBlocks = new iBlocks[1];
iBlocks[0] = new greenBlock();
iBlocks[1] = new yellowBlock();

foreach (greenBlock in iBlocks)
{
   greenBlock.doStuff()
}

doStuff() は、yellowBlock クラスでは使用されないため、インターフェイスで定義されていないメソッドです。greenBlock と yellowBlock には多くの共通機能があるため、実際のインターフェイスは見事に機能します。ただし、オブジェクトの種類ごとに完全に個別の配列を作成せずにアクセスしたい各クラスの特別な側面があります。前もって感謝します!

4

1 に答える 1

6

as演算子を使用できます。

foreach (var block in iBlocks)
{
    var green = block as greenBlock;
    if (green != null)
         green.doStuff()
}

またはLINQで

foreach (var green in iBlocks.OfType<greenBlock>())
{
    green.doStuff()
}
于 2013-02-09T04:26:53.887 に答える