C#检查类是否为X,或者是否继承自X

时间:2016-10-21 01:56:24

标签: c# oop inheritance multiple-inheritance

我是C#的新手,我尽力找到一个与我类似的已回答的问题,但我无法得到与我的问题相关的答案。

所以, 我有一个“Instance”类,它应该是所有游戏对象的超类。 它有一个只读的ClassName属性:

    public string ClassName
    {
        get
        {
            return this.GetType().Name;
        }
    }

我这个问题的原因是我希望有以下方法,如果当前对象是className的实例,或者对象的类继承自className,则返回true。

    public bool IsA(string className)
    {
        //TODO
    }

这需要是“递归”的,所以如果案例是: X:Class1:Class2:Class4 然后X.IsA(Class4)将返回true

我研究过像object.GetType()这样的方法,但我还没有想出解决方案。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

只需使用isas声明即可。 as将尝试将其强制转换为目标,如果失败(从内存中)将为null。

这是一个快速的linqpad演示(将"yep".Dump()"替换为Console.Out.Write("yep");代表VS):

void Main()
{
    var  b = new bar();

    if (b is foo)
        "yep".Dump();
    else
        "nope".Dump();

    var b2 = new bar();
    var b3 = b2 as foo;
    // you can check if b3 is null, or if not, use it a foo.

}


class foo {}

class bar : foo {}