エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Type.IsAssignableFrom メソッド

2013/12/12

指定した Type のインスタンスを現在の Type のインスタンスに代入できるかどうかを判断します。

Namespace:  System
アセンブリ:  mscorlib (mscorlib.dll 内)

public virtual bool IsAssignableFrom(
	Type c
)

パラメーター

c
型: System.Type
現在の Type と比較する Type

戻り値

型: System.Boolean
true が返されるのは、c および現在の Type が同じ型を表している場合、現在の Typec の継承可能な階層内にある場合、現在の Typec に実装されるインターフェイスである場合、または c がジェネリック型パラメーターであり、現在の Typec の制約の 1 つを表している場合です。false が返されるのは、これらの条件がいずれも満たされない場合、または cnull である場合です。

このメソッドは、派生クラスでオーバーライドできます。

メモメモ:

ジェネリック型定義は、クローズ構築型から割り当てることはできません。つまり、クローズ構築型 MyGenericList<int> (Visual Basic の場合は MyGenericList(Of Integer)) を型 MyGenericList<T> の変数に割り当てることはできません。

GetElementType を使用して、Type の要素型を判別できます。

IsAssignableFrom メソッドで定義済みクラス、整数配列、およびジェネリックを使用する例を次に示します。

メモメモ:

この例を実行するには、「Windows Phone での静的 TextBlock コントロールのあるコード例のビルド」を参照してください。


using System;
using System.Collections.Generic;
class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      // Demonstrate classes:
      outputBlock.Text += "Defned Classes:" + "\n";
      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();

      outputBlock.Text += String.Format("room assignable from kitchen: {0}\n", 
         room1Type.IsAssignableFrom(kitchen1Type));
      outputBlock.Text += String.Format("bedroom assignable from guestroom: {0}\n", 
         bedroom1Type.IsAssignableFrom(guestroom1Type));
      outputBlock.Text += String.Format("kitchen assignable from masterbedroom: {0}\n", 
         kitchen1Type.IsAssignableFrom(masterbedroom1Type));

      // Demonstrate arrays:
      outputBlock.Text += "\n";
      outputBlock.Text += "Integer arrays:\n";

      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();

      outputBlock.Text += String.Format("int[2] assignable from int[10]: {0}\n", 
         array2Type.IsAssignableFrom(array10Type));
      outputBlock.Text += String.Format("int[2] assignable from int[2,4]: {0}\n", 
         array2Type.IsAssignableFrom(array24Type));
      outputBlock.Text += String.Format("int[2,4] assignable from int[2,2]: {0}\n", 
         array24Type.IsAssignableFrom(array22Type));

      // Demonstrate generics:
      outputBlock.Text += "\n";
      outputBlock.Text += "Generics:\n";

      // Note that "int?[]" is the same as "Nullable<int>[]"
      int?[] arrayNull = new int?[10];
      List<int> genIntList = new List<int>();
      List<object> genObjList = new List<object>();
      List<Exception> genExList = new List<Exception>();

      Type arrayNullType = arrayNull.GetType();
      Type genIntListType = genIntList.GetType();
      Type genObjListType = genObjList.GetType();
      Type genExListType = genExList.GetType();

      outputBlock.Text += String.Format("int[10] assignable from int?[10]: {0}\n", 
         array10Type.IsAssignableFrom(arrayNullType));
      outputBlock.Text += String.Format("List<object> assignable from List<Exception>: {0}\n", 
         genObjListType.IsAssignableFrom(genExListType));
      outputBlock.Text += String.Format("List<object> assignable from List<int>: {0}\n", 
         genObjListType.IsAssignableFrom(genIntListType));
   }
}
class Room
{
}

class Kitchen : Room
{
}

class Bedroom : Room
{
}

class Guestroom : Bedroom
{
}

class MasterBedroom : Bedroom
{
}

/* This code produces the following output:

Defined 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<object> assignable from List<Exception>: false
List<object> assignable from List<int>: false
 */


Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示:
© 2015 Microsoft