如何从object类型的对象访问方法

use*_*430 0 c# class object

我有两个名为Road和City的类,它们有以下方法:

"阶级之路"

public Road()
    {
      public int getId()
      {
          return this.id;
      }
    }
Run Code Online (Sandbox Code Playgroud)

"阶级城市"

public City()
    {
      public string getName()
      {
          return this.name;
      }
    }
Run Code Online (Sandbox Code Playgroud)

在另一个名为Image的类中,我创建了Object类型的City和Road实例

    Object o = new Object();
    City c = cc.getCityByCoordinates(coordinates);
    o = c;
Run Code Online (Sandbox Code Playgroud)

现在我如何在"o"对象上访问City.class中的方法?像o.getName(); - 如果可以的话,请帮忙.

Bra*_*NET 5

您可以通过转换为"城市"轻松完成此操作:

City c = o as City;
c.getName();
Run Code Online (Sandbox Code Playgroud)

请注意,as如果转换无效,运算符将返回null,因此您应该在使用之前进行检查:

City c = o as City;
if (c != null)
    c.getName();
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用is运算符和C风格的强制转换:

if (o is City)
   ((City)o).getName();
Run Code Online (Sandbox Code Playgroud)

一句警告,像这样的向下传播是一种"代码味道".查看您的代码,看看为什么需要这样做.也许它应该存储在一个界面中.Object变量也可以是"代码气味",并且仅在必要时使用.