惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
量子位
人人都是产品经理
人人都是产品经理
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
Recent Announcements
Recent Announcements
A
About on SuperTechFans
Microsoft Security Blog
Microsoft Security Blog
N
Netflix TechBlog - Medium
H
Help Net Security
博客园 - 三生石上(FineUI控件)
博客园 - 司徒正美
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MyScale Blog
MyScale Blog
The Cloudflare Blog
S
SegmentFault 最新的问题
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Proofpoint News Feed
宝玉的分享
宝玉的分享
Vercel News
Vercel News

博客园 - 蓝之风

解决:gradle 前言中不允许有内容 【LINQ标准查询操作符总结】之聚合操符 RxJS 中的创建操作符 项目管理(1) 什么是项目? 数据库表数据统计及数据表的数据大小统计SQL Windows Azure NotificationHub+Firebase Cloud Message 实现消息推动(付源码) Windows 下安装RabbitMQ服务器及基本配置 【设计模式】组合模式实现二叉树先序遍历,中序遍历和后序遍历 【设计模式】组合模式 Composite Pattern 【设计模式】桥接模式 Bridge Pattern 在VS 2017 下创建 Xamarin NuGet Package 【设计模式】适配器模式 Adapter Pattern 基础查找算法(顺序无序查找算法和递归二叉查找算法) 【设计模式】原型模式 Pototype Pattern 三个基本排序算法执行效率比较(冒泡排序,选择排序和插入排序) 【设计模式】单例模式 Singleton Pattern 【设计模式】建造者模式 Builder Pattern 【设计模式】抽象工厂模式 Abstract Factory Pattern 【设计模式】工厂方法模式 Factory Method Pattern
C# 中一些类关系的判定方法
蓝之风 · 2018-12-26 · via 博客园 - 蓝之风

2018-12-26 16:26  蓝之风  阅读(1521)  评论()    收藏  举报

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