Object.GetType メソッド

定義

現在のインスタンスの Type を取得します。

public:
 Type ^ GetType();
public Type GetType ();
member this.GetType : unit -> Type
Public Function GetType () As Type

戻り値

Type

現在のインスタンスの正確なランタイム型。

次のコード例は、現在のインスタンスのランタイム型を返す GetType 方法を示しています。

using namespace System;

public ref class MyBaseClass {};

public ref class MyDerivedClass: MyBaseClass{};

int main()
{
   MyBaseClass^ myBase = gcnew MyBaseClass;
   MyDerivedClass^ myDerived = gcnew MyDerivedClass;
   Object^ o = myDerived;
   MyBaseClass^ b = myDerived;
   Console::WriteLine( "mybase: Type is {0}", myBase->GetType() );
   Console::WriteLine( "myDerived: Type is {0}", myDerived->GetType() );
   Console::WriteLine( "object o = myDerived: Type is {0}", o->GetType() );
   Console::WriteLine( "MyBaseClass b = myDerived: Type is {0}", b->GetType() );
}

/*

This code produces the following output.

mybase: Type is MyBaseClass
myDerived: Type is MyDerivedClass
object o = myDerived: Type is MyDerivedClass
MyBaseClass b = myDerived: Type is MyDerivedClass 

*/
using System;

public class MyBaseClass {
}

public class MyDerivedClass: MyBaseClass {
}

public class Test
{
   public static void Main()
   {
      MyBaseClass myBase = new MyBaseClass();
      MyDerivedClass myDerived = new MyDerivedClass();
      object o = myDerived;
      MyBaseClass b = myDerived;

      Console.WriteLine("mybase: Type is {0}", myBase.GetType());
      Console.WriteLine("myDerived: Type is {0}", myDerived.GetType());
      Console.WriteLine("object o = myDerived: Type is {0}", o.GetType());
      Console.WriteLine("MyBaseClass b = myDerived: Type is {0}", b.GetType());
   }
}
// The example displays the following output:
//    mybase: Type is MyBaseClass
//    myDerived: Type is MyDerivedClass
//    object o = myDerived: Type is MyDerivedClass
//    MyBaseClass b = myDerived: Type is MyDerivedClass
type MyBaseClass() = class end

type MyDerivedClass() = 
    inherit MyBaseClass()

let myBase = MyBaseClass()
let myDerived = MyDerivedClass()
let o: obj = myDerived
let b: MyBaseClass = myDerived

printfn $"mybase: Type is {myBase.GetType()}"
printfn $"myDerived: Type is {myDerived.GetType()}"
printfn $"object o = myDerived: Type is {o.GetType()}"
printfn $"MyBaseClass b = myDerived: Type is {b.GetType()}"
// The example displays the following output:
//    mybase: Type is MyBaseClass
//    myDerived: Type is MyDerivedClass
//    object o = myDerived: Type is MyDerivedClass
//    MyBaseClass b = myDerived: Type is MyDerivedClass
' Define a base and a derived class.
Public Class MyBaseClass
End Class 

Public Class MyDerivedClass : Inherits MyBaseClass
End Class 

Public Class Test
    Public Shared Sub Main() 
        Dim base As New MyBaseClass()
        Dim derived As New MyDerivedClass()
        Dim o As Object = derived
        Dim b As MyBaseClass = derived
        
        Console.WriteLine("base.GetType returns {0}", base.GetType())
        Console.WriteLine("derived.GetType returns {0}", derived.GetType())
        Console.WriteLine("Dim o As Object = derived; o.GetType returns {0}", o.GetType())
        Console.WriteLine("Dim b As MyBaseClass = derived; b.Type returns {0}", b.GetType())
    End Sub 
End Class 
' The example displays the following output:
'    base.GetType returns MyBaseClass
'    derived.GetType returns MyDerivedClass
'    Dim o As Object = derived; o.GetType returns MyDerivedClass
'    Dim b As MyBaseClass = derived; b.Type returns MyDerivedClass

注釈

.NET 型システムのすべての型の基本クラスであるため System.Object 、このメソッドを GetType 使用して、すべての .NET 型を表すオブジェクトを返 Type すことができます。 .NET では、次の 5 つの種類のカテゴリが認識されます。

同じランタイム型を持つ 2 つのオブジェクトx``yの場合は、Object.ReferenceEquals(x.GetType(),y.GetType())返しますtrue。 次の例では、メソッドと共に GetType メソッドを ReferenceEquals 使用して、1 つの数値が他の 2 つの数値と同じ型であるかどうかを判断します。

int n1 = 12;
int n2 = 82;
long n3 = 12;

Console.WriteLine("n1 and n2 are the same type: {0}",
                  Object.ReferenceEquals(n1.GetType(), n2.GetType()));
Console.WriteLine("n1 and n3 are the same type: {0}",
                  Object.ReferenceEquals(n1.GetType(), n3.GetType()));

// The example displays the following output:
//       n1 and n2 are the same type: True
//       n1 and n3 are the same type: False
open System

let n1 = 12
let n2 = 82
let n3 = 12L

printfn $"n1 and n2 are the same type: {Object.ReferenceEquals(n1.GetType(), n2.GetType())}"
printfn $"n1 and n3 are the same type: {Object.ReferenceEquals(n1.GetType(), n3.GetType())}"
// The example displays the following output:
//       n1 and n2 are the same type: True
//       n1 and n3 are the same type: False
Module Example
   Public Sub Main()
      Dim n1 As Integer = 12
      Dim n2 As Integer = 82
      Dim n3 As Long = 12
      
      Console.WriteLine("n1 and n2 are the same type: {0}",
                        Object.ReferenceEquals(n1.GetType(), n2.GetType()))
      Console.WriteLine("n1 and n3 are the same type: {0}",
                        Object.ReferenceEquals(n1.GetType(), n3.GetType()))
   End Sub
End Module
' The example displays the following output:
'       n1 and n2 are the same type: True
'       n1 and n3 are the same type: False

注意

オブジェクトが特定の型であるかどうかを判断するには、言語の型比較キーワードまたはコンストラクトを使用できます。 たとえば、Visual BasicのTypeOf…Isコンストラクトや C# のキーワードをis使用できます。

この GetType メソッドは、派生元のすべての型 Objectによって継承されます。 つまり、次の例に示すように、独自の言語の比較キーワードを使用するだけでなく、メソッドを使用 GetType して特定のオブジェクトの型を決定できます。

object[] values = { (int) 12, (long) 10653, (byte) 12, (sbyte) -5,
                   16.3, "string" };
foreach (var value in values) {
   Type t = value.GetType();
   if (t.Equals(typeof(byte)))
      Console.WriteLine("{0} is an unsigned byte.", value);
   else if (t.Equals(typeof(sbyte)))
      Console.WriteLine("{0} is a signed byte.", value);
   else if (t.Equals(typeof(int)))
      Console.WriteLine("{0} is a 32-bit integer.", value);
   else if (t.Equals(typeof(long)))
      Console.WriteLine("{0} is a 64-bit integer.", value);
   else if (t.Equals(typeof(double)))
      Console.WriteLine("{0} is a double-precision floating point.",
                        value);
   else
      Console.WriteLine("'{0}' is another data type.", value);
}

// The example displays the following output:
//    12 is a 32-bit integer.
//    10653 is a 32-bit integer.
//    12 is an unsigned byte.
//    -5 is a signed byte.
//    16.3 is a double-precision floating point.
//    'string' is another data type.
let values: obj[] = 
    [| 12; 10653L; 12uy
       -5y; 16.3; "string" |]

for value in values do
    let t = value.GetType()
    if t.Equals typeof<byte> then
        printfn $"{value} is an unsigned byte."
    elif t.Equals typeof<sbyte> then
        printfn $"{value} is a signed byte."
    elif t.Equals typeof<int> then
        printfn $"{value} is a 32-bit integer."
    elif t.Equals typeof<int64> then
        printfn $"{value} is a 64-bit integer."
    elif t.Equals typeof<double> then
        printfn $"{value} is a double-precision floating point."
    else
        printfn $"'{value}' is another data type."

// The example displays the following output:
//    12 is a 32-bit integer.
//    10653 is a 32-bit integer.
//    12 is an unsigned byte.
//    -5 is a signed byte.
//    16.3 is a double-precision floating point.
//    'string' is another data type.
Module Example
   Public Sub Main()
      Dim values() As Object = { 12, CLng(10653), CByte(12), 
                                 CSbyte(-5), 16.3, "string" } 
      For Each value In values
         Dim t AS Type = value.GetType()
         If t.Equals(GetType(Byte))
            Console.WriteLine("{0} is an unsigned byte.", value)
         ElseIf t.Equals(GetType(SByte))
            Console.WriteLine("{0} is a signed byte.", value)
         ElseIf t.Equals(GetType(Integer))   
            Console.WriteLine("{0} is a 32-bit integer.", value)
         ElseIf t.Equals(GetType(Long))   
            Console.WriteLine("{0} is a 64-bit integer.", value)
         ElseIf t.Equals(GetType(Double))
            Console.WriteLine("{0} is a double-precision floating point.", 
                              value)
         Else
            Console.WriteLine("'{0}' is another data type.", value)
         End If   
      Next      
   End Sub
End Module
' The example displays the following output:
'       12 is a 32-bit integer.
'       10653 is a 32-bit integer.
'       12 is an unsigned byte.
'       -5 is a signed byte.
'       16.3 is a double-precision floating point.
'       'string' is another data type.

オブジェクトは Type 、現在 Objectのクラスに関連付けられているメタデータを公開します。

適用対象

こちらもご覧ください