typeof (Referencia de C#)typeof (C# Reference)

Se usa para obtener el objeto System.Type de un tipo.Used to obtain the System.Type object for a type. Una expresión typeof tiene el formato siguiente:A typeof expression takes the following form:

System.Type type = typeof(int);

ComentariosRemarks

Para obtener el tipo en tiempo de ejecución de una expresión, puede usar el método GetType de .NET Framework, como en el ejemplo siguiente: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();

El operador typeof no se puede sobrecargar.The typeof operator cannot be overloaded.

El operador typeof también puede usarse en tipos genéricos abiertos.The typeof operator can also be used on open generic types. Los tipos con más de un parámetro de tipo deben incluir el número correspondiente de comas en la especificación.Types with more than one type parameter must have the appropriate number of commas in the specification. Por ejemplo, Dictionary<TKey,TValue> tiene dos argumentos de tipo, por lo que puede usar una coma:For example, the Dictionary<TKey,TValue> has two type arguments, so you use one comma:

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

En el ejemplo siguiente se muestra cómo determinar si el tipo de valor devuelto de un método es un IEnumerable<T> genérico.The following example shows how to determine whether the return type of a method is a generic IEnumerable<T>. Type.GetInterface devolverá null si el tipo de valor devuelto no es un tipo genérico IEnumerable<T>.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]
        */
    }
}

EjemploExample

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
*/

EjemploExample

En este ejemplo se usa el método GetType para determinar el tipo que se usa para contener el resultado de un cálculo numérico.This sample uses the GetType method to determine the type that is used to contain the result of a numeric calculation. Esto varía en función de los requisitos de almacenamiento del número resultante.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
*/

Especificación del lenguaje C#C# language specification

Para obtener más información, vea la sección El operador typeof de la Especificación del lenguaje C#.For more information, see The typeof operator in the C# Language Specification. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.The language specification is the definitive source for C# syntax and usage.

Vea tambiénSee also