Yo quiero hacer esto en C#, pero no sé cómo:

Tengo una cadena con un nombre de clase -e.g: FooClass y quiero invocar un (estático) método de esta clase:

FooClass.MyMethod();

Obviamente, necesito encontrar una referencia a la clase a través de la reflexión, pero ¿cómo?

InformationsquelleAutor rutger | 2009-06-25

5 Comentarios

  1. 117

    Usted desea utilizar el Tipo.GetType método.

    Aquí es un ejemplo muy simple:

    using System;
    using System.Reflection;
    
    class Program
    {
        static void Main()
        {
            Type t = Type.GetType("Foo");
            MethodInfo method 
                 = t.GetMethod("Bar", BindingFlags.Static | BindingFlags.Public);
    
            method.Invoke(null, null);
        }
    }
    
    class Foo
    {
        public static void Bar()
        {
            Console.WriteLine("Bar");
        }
    }

    Digo simple porque es muy fácil encontrar un tipo de este camino que se interna por la misma asamblea. Por favor, consulte Jon respuesta para una explicación más detallada en cuanto a lo que usted necesita saber acerca de eso. Una vez que haya recuperado el tipo de mi ejemplo se muestra cómo invocar el método.

  2. 90

    Puede utilizar Tipo.GetType(cadena), pero usted necesitará saber el completo nombre de la clase, incluyendo el espacio de nombres, y si no en la actual asamblea o mscorlib usted necesitará el nombre de ensamblado en su lugar. (Lo ideal es usar Assembly.GetType(typeName) lugar – me parece que es más fácil en términos de conseguir la asamblea de referencia a la derecha!)

    Por ejemplo:

    //"I know String is in the same assembly as Int32..."
    Type stringType = typeof(int).Assembly.GetType("System.String");
    
    //"It's in the current assembly"
    Type myType = Type.GetType("MyNamespace.MyType");
    
    //"It's in System.Windows.Forms.dll..."
    Type formType = Type.GetType ("System.Windows.Forms.Form, " + 
        "System.Windows.Forms, Version=2.0.0.0, Culture=neutral, " + 
        "PublicKeyToken=b77a5c561934e089");
    • +1 muy Bien hecho – he añadido una respuesta que muestra como para utilizar el tipo una vez que se han recuperado. Si lo desea, seguir adelante y combinar mi ejemplo en tu respuesta y voy a eliminar de la mina.
    • Dado que el tuyo ya ha sido aceptada, le sugiero que lo hacemos al revés – agregar a mi contenido de su respuesta, y me voy a borrar esta 🙂
    • Sólo para ampliar su respuesta es más, si usted no está seguro de lo que para pasar de texto a GetType función y puede acceder a esta clase, a continuación, mirar typeof(clase).AssemblyQualifiedName, esto le dará una idea clara.
  3. 7

    Una simple uso:

    Type typeYouWant = Type.GetType("NamespaceOfType.TypeName, AssemblyName");

    Ejemplo:

    Type dogClass = Type.GetType("Animals.Dog, Animals");
  4. 5

    Poco tarde para responder, pero esto debe hacer el truco

    Type myType = Type.GetType("AssemblyQualifiedName");

    su asamblea el nombre completo debe ser como este

    "Boom.Bam.Class, Boom.Bam, Version=1.0.0.262, Culture=neutral, PublicKeyToken=e16dba1a3c4385bd"
    • Gracias por aclarar explícitamente lo que la asamblea nombre completo debe ser similar.
  5. 3

    A través de Tipo.GetType usted puede obtener el tipo de información. Usted puede utilizar esta clase para obtener el método de la información y, a continuación, invocar el método (para los métodos estáticos, dejar el primer parámetro es null).

    También puede ser necesario el Nombre de ensamblado para identificar correctamente el tipo.

    Si el tipo es en la actualidad
    la ejecución de la construcción o en Mscorlib.dll,
    es suficiente para abastecer el tipo
    nombre calificado por su espacio de nombres.

Dejar respuesta

Please enter your comment!
Please enter your name here