我有一个基类和三个从该类派生的子类型(参见下面的示例).
public abstract class Vehicle
{
    string name;
    string color;
}
public class Car : Vehicle 
{
    int nrofwheels;
}
public class Train : Vehicle 
{
    int nrofrailcars;
}
Run Code Online (Sandbox Code Playgroud)
为了使我的方法之一尽可能通用,我想将基类型作为参数传递,然后检测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);
    }
}
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用,为什么以及我还能尝试什么?
[编辑]我知道班级的例子并不完整,但我认为这不是必要的.
您应该重构该类并将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;
    }
}
Run Code Online (Sandbox Code Playgroud)