关于oop:C#检查类是否为X,或者是否继承自X

C# Checking if a class is X, OR inherited from X

本问题已经有最佳答案,请猛点这里访问。

我对C相当陌生,我尽力找到一个与我相似的已回答问题,但我无法得到与我的问题相关的答案。

所以,我有一个"实例"类,它应该是所有游戏对象的超级类。它具有只读类名属性,定义如下:

1
2
3
4
5
6
7
    public string ClassName
    {
        get
        {
            return this.GetType().Name;
        }
    }

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

1
2
3
4
    public bool IsA(string className)
    {
        //TODO
    }

这需要有点"递归",因此如果情况是:X:等级1:等级2:等级4那么x.isa(第4类)将返回true

我研究过object.getType()这样的方法,但还没有找到解决方案。

有什么想法吗?


只需使用isas语句。as将尝试将其强制转换到目标,如果失败(从内存中),则为空。

下面是一个快速的linqpad演示(用vs的Console.Out.Write("yep");替换"yep".Dump()"):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 {}