typeof (C# リファレンス)typeof (C# Reference)

型の System.Type オブジェクトを取得するために使用されます。Used to obtain the System.Type object for a type. typeof 式は次の形式になります。A typeof expression takes the following form:

System.Type type = typeof(int);

コメントRemarks

式の実行時の型を取得する場合は、次の例のように、.NET Framework のメソッド GetType を使用できます。To obtain the run-time type of an expression, you can use the .NET Framework method GetType, as in the following example:

int i = 0;
System.Type type = i.GetType();

typeof 演算子はオーバーロードできません。The typeof operator cannot be overloaded.

typeof 演算子は、オープン ジェネリック型に対しても使用できます。The typeof operator can also be used on open generic types. 複数の型パラメーターを持つ型には、適切な数のコンマを指定する必要があります。Types with more than one type parameter must have the appropriate number of commas in the specification. たとえば、Dictionary<TKey,TValue> には 2 つの型引数があるため、1 つのコンマを使用します。For example, the Dictionary<TKey,TValue> has two type arguments, so you use one comma:

Type t = typeof(System.Collection.Generic.Dictionary<,>);

次の例は、メソッドの戻り値の型がジェネリック IEnumerable<T> であるかどうかを確認する方法を示しています。The following example shows how to determine whether the return type of a method is a generic IEnumerable<T>. Type.GetInterface では、戻り値の型が IEnumerable<T> でない場合、null ジェネリック型が返されます。Type.GetInterface will return null if the return type is not an IEnumerable<T> generic type.

using System;
using System.Collections.Generic;
using System.Reflection;

class Example
{
    static void Main()
    {
        MethodInfo method = typeof(string).GetMethod("Copy");
        Type t = method.ReturnType.GetInterface(typeof(IEnumerable<>).Name);
        if (t != null)
            Console.WriteLine(t);
        else
            Console.WriteLine("The return type is not IEnumerable<T>.");
        /*
        Output:
        System.Collections.Generic.IEnumerable`1[System.Char]
        */
    }
}

Example

public class ExampleClass
{
   public int sampleMember;
   public void SampleMethod() {}

   static void Main()
   {
      Type t = typeof(ExampleClass);
      // Alternatively, you could use
      // ExampleClass obj = new ExampleClass();
      // Type t = obj.GetType();

      Console.WriteLine("Methods:");
      System.Reflection.MethodInfo[] methodInfo = t.GetMethods();

      foreach (System.Reflection.MethodInfo mInfo in methodInfo)
         Console.WriteLine(mInfo.ToString());

      Console.WriteLine("Members:");
      System.Reflection.MemberInfo[] memberInfo = t.GetMembers();

      foreach (System.Reflection.MemberInfo mInfo in memberInfo)
         Console.WriteLine(mInfo.ToString());
   }
}
/*
 Output:
    Methods:
    Void SampleMethod()
    System.String ToString()
    Boolean Equals(System.Object)
    Int32 GetHashCode()
    System.Type GetType()
    Members:
    Void SampleMethod()
    System.String ToString()
    Boolean Equals(System.Object)
    Int32 GetHashCode()
    System.Type GetType()
    Void .ctor()
    Int32 sampleMember
*/

Example

このサンプルでは、GetType メソッドを使用して、数値計算結果の格納に使用される型を確認しています。This sample uses the GetType method to determine the type that is used to contain the result of a numeric calculation. これは、結果の数のストレージ要件によって変わります。This depends on the storage requirements of the resulting number.

class GetTypeTest
{
    static void Main()
    {
        int radius = 3;
        Console.WriteLine("Area = {0}", radius * radius * Math.PI);
        Console.WriteLine("The type is {0}",
                          (radius * radius * Math.PI).GetType()
        );
    }
}
/*
Output:
Area = 28.2743338823081
The type is System.Double
*/

C# 言語仕様C# language specification

詳細については、「C# 言語仕様」の typeof 演算子に関するセクションを参照してください。For more information, see The typeof operator in the C# Language Specification. 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。The language specification is the definitive source for C# syntax and usage.

関連項目See also