C#判断某个类是否派生某个类或是否实现了某个接口

  • 时间:2017-10-19
  • 分类:ASP.NET
  • 845 人浏览
[导读]is和asis关键字可以确定对象实例或表达式结果是否可转换为指定类型。基本语法:expr is type如果满足以下条件,则 is 语句为 true:expr 是与 type 具有相同类型的一个实例。

is和as

is关键字可以确定对象实例或表达式结果是否可转换为指定类型。基本语法:

如果满足以下条件,则 is 语句为 true:

expr 是与 type 具有相同类型的一个实例。 expr 是派生自 type 的类型的一个实例。 换言之,expr 结果可以向上转换为 type 的一个实例。 expr 具有属于 type 的一个基类的编译时类型,expr 还具有属于 type 或派生自 type 的运行时类型。 变量的编译时类型是其声明中定义的变量类型。 变量的运行时类型是分配给该变量的实例类型。 expr 是实现 type 接口的类型的一个实例。

代码:

as运算符类似于转换运算。如果无法进行转换,则 as 会返回 null,而不是引发异常。基本语法:

等效

可以尝试转换,根据转换的成功与否判断类的派生关系。
参考至:

https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/is https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/as   Type.IsSubclassOf 和 Type.IsAssignableFrom

Type.IsSubclassOf 确定当前 Type 是否派生自指定的 Type。

如果当前 Type 派生于 c,则为 True;否则为 false。 如果 当前Type 和 c 相等,此方法也返回 True。
但是IsSubclassOf方法不能用于确定接口是否派生自另一个接口,或是否类实现的接口。

Type.IsAssignableFrom 确定指定类型的实例是否可以分配给当前类型的实例。

如果满足下列任一条件,则为 true:

c 且当前实例表示相同类型。 c 是从当前实例直接或间接派生的。 c 它继承自的当前实例; 如果直接从当前实例派生 c 如果它继承自一个或多个从继承类的当前实例的一系列的当前实例中间接派生。 当前实例是一个 c 实现的接口。 c 是一个泛型类型参数,并且当前实例表示 c 的约束之一。

代码:

可以使用 Type.IsSubclassOf 判断类的派生, 使用 Type.IsAssignableFrom 判断类的派生和接口继承。
参考至:

https://msdn.microsoft.com/zh-cn/library/office/system.type.issubclassof https://msdn.microsoft.com/zh-cn/library/office/system.type.isassignablefrom

来源:本文为线上采编,如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除!
标签: 接口