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

时间:2014-05-27 17:05:46

标签: c# class object

我有两个名为Road和City的课程,他们有以下方法:

“班道”

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

“班级城市”

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

在另一个名为Image的类中,我创建了Object

类型的City和Road实例

实施例

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

现在如何在“o”对象上访问City.class中的方法?像o.getName(); - 如果可以,请帮助。

4 个答案:

答案 0 :(得分:5)

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

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变量也可以是“代码气味”,仅在必要时使用。

答案 1 :(得分:3)

  

如何在" o"上访问City课程中的方法?宾语?

施展它:

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

如果o <{1}},那么您将在运行时获得异常。要在尝试投标之前检查City是否为o,您可以使用City

as

答案 2 :(得分:1)

City cityFromObject = o as City;
if(null != cityFromObject) {
   // do something with cityFromObject.getName();
}

答案 3 :(得分:0)

您还可以使用反射从City中检索结果。

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