정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Type.IsAssignableFrom 메서드

2013-12-13

현재 Type의 인스턴스가 지정된 Type의 인스턴스로부터 할당될 수 있는지 여부를 확인합니다.

Namespace:  System
어셈블리:  mscorlib(mscorlib.dll)

public virtual bool IsAssignableFrom(
	Type c
)

매개 변수

c
형식: System.Type
현재 Type과 비교할 Type입니다.

반환 값

형식: System.Boolean
c와 현재 Type이 같은 형식을 나타내거나, 현재 Typec의 상속 계층 구조에 속하거나, 현재 Typec가 구현하는 인터페이스이거나, c가 제네릭 형식 매개 변수이고 현재 Typec의 제약 조건 중 하나를 나타내면 true입니다. 이러한 조건이 모두 참이 아니거나 cnull이면 false를 입니다.

이 메서드는 파생 클래스에서 재정의할 수 있습니다.

참고참고:

제네릭 형식 정의는 폐쇄형 생성 형식에서 할당할 수 없습니다. 즉, 폐쇄형 생성 형식 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

Windows Phone

표시: