反射

发布时间 2023-08-23 09:43:52作者: euv

IsInstanceOfType

GetInterfaces()

interface I
{

}

interface II : I
{

}


class III : II
{

}

class IIII : III
{

}
// 判断某个接口或类是否继承了某个接口
Array.IndexOf(typeof(IIII).GetInterfaces(), typeof(I))

IsSubclassOf 判断一个类型是不是继承自指定的类型

bool res = false;
// 不适用于接口
res = typeof(IIII).IsSubclassOf(typeof(I));
System.Console.WriteLine(res);   // False
// 不适用于接口
res = typeof(II).IsSubclassOf(typeof(I));
System.Console.WriteLine(res);   // False
// 不适用于接口
res = typeof(IIII).IsSubclassOf(typeof(II));
System.Console.WriteLine(res);   // False

res = typeof(IIII).IsSubclassOf(typeof(III));
System.Console.WriteLine(res);   // True

// 相同类型返回False
res = typeof(IIII).IsSubclassOf(typeof(IIII));
System.Console.WriteLine(res);   // False

IsAssignableFrom()

res = typeof(I).IsAssignableFrom(typeof(I));
System.Console.WriteLine(res); // True

res = typeof(I).IsAssignableFrom(typeof(II));
System.Console.WriteLine(res);// True

res = typeof(I).IsAssignableFrom(typeof(III));
System.Console.WriteLine(res);// True

res = typeof(III).IsAssignableFrom(typeof(IIII));
System.Console.WriteLine(res);// True

res = typeof(IIII).IsAssignableFrom(typeof(IIII));
System.Console.WriteLine(res);// True