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

  • 相关阅读:
    MongoDB基础之五:游标
    SQLSERVER 中实现类似Mysql的 INSERT ON DUPLICATE KEY UPDATE
    统计C语言程序行数
    作业(一)
    无法获取有关Windows NT 组用户‘组用户’的信息,错误代码0x5(Microsoft SQL Server,错误:15404)
    DELETE与TRUNCATE的区别
    SQL Server显式事务与隐式事务
    SQL Server去掉字段内的双引号
    AlwaysOn与数据库镜像端点问题
    AlwaysOn数据同步暂停及回退技术
  • 原文地址:https://www.cnblogs.com/vaiyanzi/p/10179829.html
Copyright © 2011-2022 走看看