zoukankan      html  css  js  c++  java
  • IsSubclassOf & IsAssignableFrom

    IsSubclassOf

    • 类继承测试
    public class ClassA { }
    public class ClassB : ClassA { }
    public class ClassC : ClassB { }
    
    Console.WriteLine(typeof(ClassB).IsSubclassOf(typeof(ClassA))); // TRUE
    Console.WriteLine(typeof(ClassB).IsSubclassOf(typeof(ClassB))); // FALSE
    Console.WriteLine(typeof(ClassB).IsSubclassOf(typeof(ClassC))); // FALSE
    Console.WriteLine(typeof(ClassC).IsSubclassOf(typeof(ClassA))); // TRUE
    Console.WriteLine(typeof(ClassC).IsSubclassOf(typeof(ClassB))); // TRUE
    

    IsSubclassOf用于判断class之间是否继承。接口之间的继承无法进行判断。

    • 接口继承测试
    public interface ID { }
    public interface IE : ID { }
    public class ClassD : ID { }
    Console.WriteLine(typeof(ClassD).IsSubclassOf(typeof(ID))); // FALSE
    Console.WriteLine(typeof(IE).IsSubclassOf(typeof(ID));      // FALSE
    
    • 泛型类测试
    public class ClassF<T> { }
    public class ClassG<T> : ClassF<T> { }
    public class ClassH : ClassF<int> { }
    // no type constraint, no good
    Console.WriteLine(typeof(ClassG<>).IsSubclassOf(typeof(ClassF<>))); //FALSE
    // no covariance support here
    Console.WriteLine(typeof(string).IsSubclassOf(typeof(object))); // TRUE
     Console.WriteLine(typeof(ClassG<string>).IsSubclassOf(typeof(ClassF<object>))); // FALSE
    // type constraint has to match
    Console.WriteLine(typeof(ClassG<int>).IsSubclassOf(typeof(ClassF<int>)));// TRUE
    Console.WriteLine(typeof(ClassH).IsSubclassOf(typeof(ClassF<int>)));    // TRUE
    Console.WriteLine(typeof(ClassH).IsSubclassOf(typeof(ClassF<long>)));   // FALSE
    

    特别注意泛型类的判断

    IsAssignableFrom

    public interface IA { }
    public interface IB : IA { }
    public class ClassA : IA { }
    public class ClassB : ClassA { }
    Console.WriteLine(typeof(IA).IsAssignableFrom(typeof(IB)));            // TRUE
    Console.WriteLine(typeof(IA).IsAssignableFrom(typeof(IA)));            // TRUE
    Console.WriteLine(typeof(IB).IsAssignableFrom(typeof(IA)));            // FALSE
    Console.WriteLine(typeof(IA).IsAssignableFrom(typeof(ClassA)));        // TRUE
    Console.WriteLine(typeof(ClassA).IsAssignableFrom(typeof(ClassB)));    // TRUE
    

    用于确定是否可以从指定Type的实例分配当前Type的实例。也就是说用于判断继承和实现接口类。

    泛型测试留给园友们自行测试。

  • 相关阅读:
    手贱!使用django,在数据库直接删除了表
    js中在一个函数中引用另一个函数中的函数,可以这么做
    上传下载文件方式
    阻止form提交数据,通过ajax等上传数据
    一种思路,隐藏input标签,通过label关联
    java 寻找水仙花数
    java 统计素数个数问题
    java 兔子生仔问题
    java 实现读取某个目录下指定类型的文件
    通过java 来实现对多个文件的内容合并到一个文件中
  • 原文地址:https://www.cnblogs.com/cqxhl/p/12993301.html
Copyright © 2011-2022 走看看