我是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()这样的方法,但我还没有想出解决方案。
有什么想法吗?
答案 0 :(得分:1)
只需使用is
或as
声明即可。
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 {}