我有一个基类和三个从该类派生的子类型(参见下面的例子)。
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);
}
}
这似乎不起作用,为什么以及我还能尝试什么?
[编辑]我知道班级的例子并不完整,但我认为这不是必要的。
答案 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);
}
}