获取子类类型

时间:2015-03-02 05:04:48

标签: c# inheritance

我有3个班级:

class O
{
}

class A : O
{
}

class B : A
{
}

当我打电话给我的代码时:

List<O> myList = new List<O>();
myList.Add(new A());
myList.Add(new B());

foreach (O obj in myList)
{
    if (obj is A)
    {
         // do something
    }
    else if (obj is B)
    {
         //do something
    }
}

但是我意识到即使我的if (obj is A)属于trueobj也会被评估为class B。有没有办法编写语句,以便当{且仅obj class B为{{1}}时,它的计算结果为真?

2 个答案:

答案 0 :(得分:3)

为什么不在基类中定义虚函数并在派生类型中覆盖它,在不同的情况下执行您需要的操作?

class O {
    public virtual void DoSomething() {
        // do smtgh in the 'O' case
    }
}

class A : O {
    public override void DoSomething() {
        // do smtgh in the 'A' case
    }
}

class B : A {
    public override void DoSomething() {
        // do smtgh in the 'B' case
    }
}

然后你的循环变为

foreach (O obj in myList) {
    obj.DoSomething();
}

答案 1 :(得分:0)

有两种方法GetTypetypeof

  

GetType是对象的一种方法。它提供了一个Type对象,一个   表示对象实例的派生类型最多。

  

Typeof返回Type对象。它通常用作参数或作为参数   变量或字段。 typeof运算符是表达式的一部分   获取类或值类型的类型指针

试试这个

 if(obj.GetType() == typeof(A)) // do something
 else if(obj.GetType() == typeof(B)) //do something