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

本文关键字:对象 访问 方法 类型 | 更新日期: 2023-09-27 18:05:28

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

"类路"

public Road()
    {
      public int getId()
      {
          return this.id;
      }
    }

"类城市"

public City()
    {
      public string getName()
      {
          return this.name;
      }
    }

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

例子
    Object o = new Object();
    City c = cc.getCityByCoordinates(coordinates);
    o = c;

现在我如何从City.class访问"o"对象上的方法?像o.getName ();-如果这是可能的,请帮助。

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

您可以通过转换为"City"来轻松地做到这一点:

City c = o as City;
c.getName();

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

City c = o as City;
if (c != null)
    c.getName();

另一种方法是使用is操作符和c风格强制转换:

if (o is City)
   ((City)o).getName();

一个警告,像这样的向下转换是一种"代码气味"。看看你的代码,看看为什么你需要这样做。也许它应该存储在接口中。Object变量也可以是一种"代码气味",仅在必要时使用。

我如何访问City类上的"0"对象的方法?

演员:

Object o = new Object();
City c = cc.getCityByCoordinates(coordinates);
o = c;
string name = ((City)o).getName();

如果o不是真正的 City,那么你将在运行时得到一个异常。要在强制转换之前检查o是否为City,可以使用as:

City c2 = o as City;  // c2 will be `null` if o is not castable to City
if(c2 != null)
   string name = c2.getName();
City cityFromObject = o as City;
if(null != cityFromObject) {
   // do something with cityFromObject.getName();
}

您还可以使用反射来检索City的结果。

        MethodInfo mi = c.GetType().GetMethod("getName");
        var result = mi.Invoke(o, null).ToString()