如何传递基类型的实例,然后检查它是什么类型的子类型?

时间:2014-08-08 13:02:09

标签: c# inheritance

我有一个基类和三个从该类派生的子类型(参见下面的例子)。

public abstract class Vehicle
{
    string name;
    string color;
}

public class Car : Vehicle 
{
    int nrofwheels;
}
public class Train : Vehicle 
{
    int nrofrailcars;
}

为了使我的方法之一尽可能通用,我想将基类型作为参数传递,然后检测hat子类型,它在我的方法中,如下所示:

public static void main(string[] args)
{
    public Car c = new Car();
    public Train t = new Train();

    public CheckType(Vehicle v)
    {
        if(v.GetType()==typeof(Car)) Console.Write(v.nrofwheels);
        else Console.Write(v.nrofrailcars);
    }
}

这似乎不起作用,为什么以及我还能尝试什么?

[编辑]我知道班级的例子并不完整,但我认为这不是必要的。

2 个答案:

答案 0 :(得分:7)

您应该重构该类并将CheckType移动到Vehicle类并在子类中重写它。并且CheckType名称不是最好的,因为该方法返回了wheel / rails的数量,所以没有任何意义。

这样的事情:

public abstract class Vehicle
{
    string name;
    string color;

    public abstract int CheckType();
}

public class Car : Vehicle 
{
    int nrofwheels;
    public override int CheckType()
    {
        return this.nrofwheels;
    }
}

public class Train : Vehicle 
{
    int nrofrailcars;
    public override int CheckType()
    {
        return this.nrofrailcars;
    }
}

答案 1 :(得分:0)

您可以使用as。您忘记转换对象以使属性可访问:

public CheckType(Vehicle v)
{
    Train t = v as Train;

    if (t != null)
        Console.Write(t.nrofrailcars);
    else
    {
        Car c = v as Car;

        if (c != null)
            Console.Write(c.nrofwheels);
    }
}