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

标签 c# arrays types interface

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

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

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

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

最佳答案

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

关于C# 访问接口(interface)数组中对象的非接口(interface)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14784924/

相关文章:

c# - 通用 orderby 子句的动态表达式

c# - 如果具有 runat ="server"属性,如何使 div 可拖动

C# 相当于 Java PushbackReader 的 unread()

javascript - 如何在数组 javascript 中添加带有 id 的新 key ?

python - 是否可以使用字符串访问 numpy 数组?

objective-c - 如何获取类簇中 "top"类的名称?

Java 内部类的类型捕获

c# - ADO.NET:将 DataTable 转换为 DataRow 数组

ios - iPhone 应用程序不会将字符串添加到数组,仅限 64 位

typescript - 如何迭代 TypeScript 中的自定义文字类型?