1. IsAssignableFrom实例方法 判断一个类或者接口是否继承自另一个指定的类或者接口。
- public interface IAnimal { }
- public interface IDog : IAnimal { }
- public class Dog : IDog { }
- public class Cate : IAnimal { }
- public class Parrot { }
-
- var iAnimalType = typeof(IAnimal);
- var iDogType = typeof(IDog);
- var dogType = typeof(Dog);
- var cateType = typeof(Cate);
- var parrotType = typeof(Parrot);
-
- Console.WriteLine(iAnimalType.IsAssignableFrom(iDogType)
- ? $"{iDogType.Name} was inherited from {iAnimalType.Name}"
- : $"{iDogType.Name} was not inherited from {iAnimalType.Name}");
-
- Console.WriteLine(iAnimalType.IsAssignableFrom(dogType)
- ? $"{dogType.Name} was inherited from {iAnimalType.Name}"
- : $"{dogType.Name} was not inherited from {iAnimalType.Name}");
-
- Console.WriteLine(iDogType.IsAssignableFrom(dogType)
- ? $"{dogType.Name} was inherited from {iDogType.Name}"
- : $"{dogType.Name} was not inherited from {iDogType.Name}");
-
- Console.WriteLine(iAnimalType.IsAssignableFrom(cateType)
- ? $"{cateType.Name} was inherited from {iAnimalType.Name}"
- : $"{cateType.Name} was not inherited from {iAnimalType.Name}");
-
- Console.WriteLine(iAnimalType.IsAssignableFrom(parrotType)
- ? $"{parrotType.Name} inherited from {iAnimalType.Name}"
- : $"{parrotType.Name} not inherited from {iAnimalType.Name}");
- Console.ReadKey();
输出结果:
IDog was inherited from IAnimal
Dog was inherited from IAnimal
Dog was inherited from IDog
Cate was inherited from IAnimal
Parrot not inherited from IAnimal
2.IsInstanceOfType 判断某个对象是否继承自指定的类或者接口
- Dog d=new Dog();
- var result=typeof(IDog).IsInstanceOfType(d);
- Console.WriteLine(result? $"Dog was inherited from IDog": $"Dog was not inherited from IDog");
- Console.ReadKey();
输出结果:
Dog was inherited from IDog
3.IsSubclassOf 判断一个对象的类型是否继承自指定的类,不能用于接口的判断,这能用于判定类的关系
- public interface IAnimal { }
- public interface IDog : IAnimal { }
- public class Dog : IDog { }
- public class Husky : Dog { }
- public class Cate : IAnimal { }
- public class Parrot { }
- Husky husky = new Husky();
- var result = husky.GetType().IsSubclassOf(typeof(Dog));
- Console.WriteLine(result ? $"Husky was inherited from Dog" : $"Husky was not inherited from Dog");
输出结果:
Husky was inherited from Dog
这个方法不能用于接口,如果穿接口进去永远返回的都是false
- Dog dog = new Dog();
- var dogResult = dog.GetType().IsSubclassOf(typeof(IDog));
- Console.WriteLine(dogResult);
结果:
false