繁体   English   中英

获取子类类型

[英]Getting the sub-class type

我有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) ,即使我的objclass B也将被评估为true 有没有一种方法可以编写这样的语句:当且仅当objclass B ,它的评估结果才为true?

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

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();
}

有两种方法GetTypetypeof

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

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

这样尝试

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM