c# - 如何确定我在列表中引用的子类?

标签 c# oop abstraction

我有一个包含大约 100 个对象的列表,这些对象恰好是瓷砖。它看起来像这样:

 List<Tile> Tiles;

在我的代码的其他地方,我有从 tile 基类派生的类,我将在这个例子中使用 house:

 public class house : Tile

在顶部列表中,我向数据结构添加了不同类型的图 block :

 Tiles.add(new house());
 Tiles.add(new church()); //ect. ect.

我的问题是,如果我通过 for 循环之类的控制结构在何处引用该列表,我如何知道哪些瓷砖是教堂或房屋。基本上我需要将两个不同类型的瓷砖放在一起比较。甚至有可能知道我引用的是哪个子类?我敢肯定对此有一个简单的解释,但是在面向对象编程方面我不是很精通,所以我什至不完全确定在提供帮助时我应该寻找什么。

最佳答案

这里有多种选择

  • 您可以使用is/as 来检查特定对象以查看它是否属于特定类型
  • 您可以添加一个鉴别器 - 也许是一个枚举属性,例如 .TileType(比较:Expression.NodeType)
  • 您可以改用虚拟方法,这样您就不需要知道类型是什么:您只需说“在这里做任何类型的事情”(即调用虚拟方法)

关于c# - 如何确定我在列表中引用的子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10781641/

相关文章:

c# - 表单应用中连接字符串的单一声明

c# - 设置存储在 Blob 上的媒体文件的内容类型

delphi - 我可以在抽象基类中保存任何数据成员吗?

ios - 抽象解析对象?

c++ - 如何正确构建 OOP 和多文件项目?

c++ - 非虚拟接口(interface)? (需要非常高效的低级抽象)

c# - 使用 DllImport 调用 C++ 函数

c# - OpenFileDialog InitialDirectory 不起作用

php - 为什么变量应该有 public 或 private 或 protect 但函数不应该在类中

unit-testing - 单一职责/单元可测试性和实用性的平衡