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

Jos*_*egl 2 c# oop abstraction

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

 List<Tile> Tiles;
Run Code Online (Sandbox Code Playgroud)

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

 public class house : Tile
Run Code Online (Sandbox Code Playgroud)

在列表顶部我已经在数据结构中添加了不同类型的切片:

 Tiles.add(new house());
 Tiles.add(new church()); //ect. ect.
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我通过像for-loop这样的控制结构引用该列表,我怎么知道哪些瓷砖是教堂或房屋.基本上我需要将两种不同类型的瓷砖进行比较.是否有可能知道我引用了哪个子类?我确信对此有一个简单的解释,但是当谈到面向对象的编程时我并不是很精通,所以我甚至不能完全确定在提供帮助时我应该寻找什么.

Mar*_*ell 5

这里有各种选择

  • 您可以使用is/ as检查特定对象以查看它是否属于特定类型
  • 你可以添加一个鉴别器 - 也许是一个枚举属性,如.TileType(compare:Expression.NodeType)
  • 您可以改为使用一种virtual方法,这样您就不需要知道类型是什么了:您只需说"做你的类型在这里做什么"(即调用虚方法)