System.Type.IsAssignableFrom 方法

方法描述

确定当前的 Type 的实例是否可以从指定 Type 的实例分配。

语法定义(C# System.Type.IsAssignableFrom 方法 的用法)

public virtual bool IsAssignableFrom(
	Type c
)

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
c System-Type 要与当前类型进行比较的类型。
返回值 System.Boolean 如果满足下列任一条件,则为 true:c 和当前 Type 表示同一类型;当前 Type 位于 c 的继承层次结构中;当前 Type 是 c 实现的接口;c 是泛型类型参数且当前 Type 表示 c 的约束之一。 如果不满足上述任何一个条件或者 c 为 null,则为 false。

提示和注释

此方法可由派生类重写。

注意

泛型类型定义不可以从封闭构造的类型赋值。 也就是说,不能将封闭构造类型 MyGenericList(在 Visual Basic 中为 MyGenericList(Of Integer))赋给 MyGenericList 类型的变量。

可以使用 GetElementType 来确定 Type 的元素类型。

如果 c 参数的类型为 TypeBuilder,则结果基于要生成的类型。 下面的代码示例使用名为 B 的生成类型对此进行演示。

复制

TypeBuilder b1 = moduleBuilder.DefineType("B", TypeAttributes.Public, typeof(A));

// Returns true:

typeof(A).IsAssignableFrom(b1))

System.Type.IsAssignableFrom 方法例子

下面的示例使用所定义的类、整数数组和泛型来演示 IsAssignableFrom 方法。

using System;
using System.Collections.Generic;
class Program
{
    public static void Main()
    {
            // Demonstrate classes:
            Console.WriteLine("Defned Classes:");
            Room room1 = new Room();
            Kitchen kitchen1 = new Kitchen();
            Bedroom bedroom1 = new Bedroom();
            Guestroom guestroom1 = new Guestroom();
            MasterBedroom masterbedroom1 = new MasterBedroom();

            Type room1Type = room1.GetType();
            Type kitchen1Type = kitchen1.GetType();
            Type bedroom1Type = bedroom1.GetType();
            Type guestroom1Type = guestroom1.GetType();
            Type masterbedroom1Type = masterbedroom1.GetType();

            Console.WriteLine("room assignable from kitchen: {0}", room1Type.IsAssignableFrom(kitchen1Type));
            Console.WriteLine("bedroom assignable from guestroom: {0}", bedroom1Type.IsAssignableFrom(guestroom1Type));
            Console.WriteLine("kitchen assignable from masterbedroom: {0}", kitchen1Type.IsAssignableFrom(masterbedroom1Type));

            // Demonstrate arrays:
            Console.WriteLine();
            Console.WriteLine("Integer arrays:");

            int[] array2 = new int[2];
            int[] array10 = new int[10];
            int[,] array22 = new int[2, 2];
            int[,] array24 = new int[2, 4];

            Type array2Type = array2.GetType();
            Type array10Type = array10.GetType();
            Type array22Type = array22.GetType();
            Type array24Type = array24.GetType();

            Console.WriteLine("int[2] assignable from int[10]: {0}", array2Type.IsAssignableFrom(array10Type));
            Console.WriteLine("int[2] assignable from int[2,4]: {0}", array2Type.IsAssignableFrom(array24Type));
            Console.WriteLine("int[2,4] assignable from int[2,2]: {0}", array24Type.IsAssignableFrom(array22Type));

            // Demonstrate generics:
            Console.WriteLine();
            Console.WriteLine("Generics:");

            // Note that "int?[]" is the same as "Nullable[]"
            int?[] arrayNull = new int?[10];
            List genIntList = new List();
            List genTList = new List();

            Type arrayNullType = arrayNull.GetType();
            Type genIntListType = genIntList.GetType();
            Type genTListType = genTList.GetType();

            Console.WriteLine("int[10] assignable from int?[10]: {0}", array10Type.IsAssignableFrom(arrayNullType));
            Console.WriteLine("List assignable from List: {0}", genIntListType.IsAssignableFrom(genTListType));
            Console.WriteLine("List assignable from List: {0}", genTListType.IsAssignableFrom(genIntListType));

            Console.ReadLine();

    }
}
class Room
{
}

class Kitchen : Room
{
}

class Bedroom : Room
{
}

class Guestroom : Bedroom
{
}

class MasterBedroom : Bedroom
{
}

//This code example produces the following output:
//
// Defned Classes:
// room assignable from kitchen: True
// bedroom assignable from guestroom: True
// kitchen assignable from masterbedroom: False
//
// Integer arrays:
// int[2] assignable from int[10]: True
// int[2] assignable from int[2,4]: False
// int[2,4] assignable from int[2,2]: True
//
// Generics:
// int[10] assignable from int?[10]: False
// List assignable from List: False
// List assignable from List: False

异常

异常 异常描述

命名空间

namespace: System

程序集: mscorlib(在 mscorlib.dll 中)

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1 受以下版本支持:

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。