zoukankan      html  css  js  c++  java
  • C# 中一些类关系的判定方法

    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

  • 相关阅读:
    【XSY2166】Hope 分治 FFT
    【XSY2612】Comb Avoiding Trees 生成函数 多项式求逆 矩阵快速幂
    【BZOJ1578】【USACO2009Feb】股票市场 背包DP
    【BZOJ2333】【SCOI2011】棘手的操作 treap合并
    【BZOJ1580】【USACO2009Hol】杀手游戏 计算几何
    【BZOJ3379】【USACO2004】交作业 区间DP
    【BZOJ2208】【JSOI2010】连通数 传递闭包
    【BZOJ4033】【HAOI2015】树上染色 树形DP
    【BZOJ3816】【清华集训2014】矩阵变换 稳定婚姻问题
    【XSY2528】道路建设 LCT 可持久化线段树
  • 原文地址:https://www.cnblogs.com/vaiyanzi/p/10179829.html
Copyright © 2011-2022 走看看