C#访问接口数组中对象的非接口方法

本文关键字:接口 对象 方法 访问 数组 | 更新日期: 2023-09-27 17:58:21

我有一个名为iBlocks的接口数组,它包含多个类的对象(它们都实现了iBlocks接口)。我想知道这是否可能,或者如何处理这样的情况,即我需要为这个数组中某个类的所有对象调用接口未覆盖的方法。例如:

iBlocks = new iBlocks[1];
iBlocks[0] = new greenBlock();
iBlocks[1] = new yellowBlock();
foreach (greenBlock in iBlocks)
{
   greenBlock.doStuff()
}

其中doStuff()是一个未在接口中定义的方法,因为它在yellowBlock类中没有使用。实际的界面非常出色,因为greenBlock和yellowBlock有很多共同的功能。但是,在不为每个对象类型创建完全独立的数组的情况下,我仍然希望访问每个类的某些特殊方面。提前感谢!

C#访问接口数组中对象的非接口方法

您可以使用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()
}