Evaluar y enviar comentarios
Contraer todo/Expandir todo Contraer todo
Esta página es específica de
Microsoft Visual Studio 2008/.NET Framework 3.5

Hay además otras versiones disponibles para:
Biblioteca de clases de .NET Framework
MethodBase..::.Invoke (Método) (Object, array<Object>[]()[])

Actualización: noviembre 2007

Invoca el método o constructor representado por la instancia actual, utilizando los parámetros especificados.

Espacio de nombres:  System.Reflection
Ensamblado:  mscorlib (en mscorlib.dll)
Visual Basic (Declaración)
Public Function Invoke ( _
    obj As Object, _
    parameters As Object() _
) As Object
Visual Basic (Uso)
Dim instance As MethodBase
Dim obj As Object
Dim parameters As Object()
Dim returnValue As Object

returnValue = instance.Invoke(obj, parameters)
C#
public Object Invoke(
    Object obj,
    Object[] parameters
)
Visual C++
public:
virtual Object^ Invoke(
    Object^ obj, 
    array<Object^>^ parameters
) sealed
J#
public final Object Invoke(
    Object obj,
    Object[] parameters
)
JScript
public final function Invoke(
    obj : Object, 
    parameters : Object[]
) : Object

Parámetros

obj
Tipo: System..::.Object
Objeto en el que debe invocarse el miembro o constructor. Si el método es estático, se omite este argumento. Si un constructor es estático, este argumento debe ser nullNothingnullptrreferencia null (Nothing en Visual Basic) o una instancia de la clase que define el constructor.
parameters
Tipo: array<System..::.Object>[]()[]
Lista de argumentos del método o constructor invocado. Esta matriz de objetos tiene el mismo número, orden y tipo que los parámetros del método o constructor que se va a invocar. Si no hay ningún parámetro, parameters debe ser nullNothingnullptrreferencia null (Nothing en Visual Basic).
Si el método o constructor que representa esta instancia toma un parámetro ref (ByRef en Visual Basic), éste no necesita ningún atributo especial para que pueda invocar el método o constructor utilizando esta función. Cualquier objeto de esta matriz que no se inicialice explícitamente con un valor contendrá el valor predeterminado de este tipo de objeto. Para los elementos de tipo de referencia, este valor es nullNothingnullptrreferencia null (Nothing en Visual Basic). Para los elementos de tipo de valor, este valor es 0, 0,0 ó false, en función del tipo de elemento específico.

Valor devuelto

Tipo: System..::.Object
Un objeto que contiene el valor devuelto del método invocado, o nullNothingnullptrreferencia null (Nothing en Visual Basic) en el caso de un constructor.

Implementaciones

_MethodBase..::.Invoke(Object, array<Object>[]()[])
ExcepciónCondición
TargetException

El parámetro obj es nullNothingnullptrreferencia null (Nothing en Visual Basic) y el método no es estático.

-O bien-

La clase de obj no declara ni hereda el método.

-O bien-

Se invoca un constructor estático y obj no es nullNothingnullptrreferencia null (Nothing en Visual Basic) ni una instancia de la clase que declaró el constructor.

ArgumentException

Los elementos de la matriz parameters no coinciden con la firma del método o constructor que esta instancia refleja.

TargetInvocationException

El método o constructor invocado produce una excepción.

TargetParameterCountException

La matriz de parameters no tiene el número correcto de argumentos.

MethodAccessException

El llamador no tiene permiso para ejecutar el constructor.

InvalidOperationException

El tipo que declara el método es un tipo genérico abierto. Es decir, la propiedad Type..::.ContainsGenericParameters devuelve true para el tipo declarador.

Éste es un método de conveniencia que llama a la sobrecarga del método Invoke(Object, BindingFlags, Binder, array<Object>[]()[], CultureInfo), pasando Default para invokeAttr y nullNothingnullptrreferencia null (Nothing en Visual Basic) para binder y culture.

Si el método invocado produce una excepción, el método Exception..::.GetBaseException devuelve la excepción.

Para invocar un método estático por medio de su objeto MethodInfo, pase nullNothingnullptrreferencia null (Nothing en Visual Basic) para obj.

a89hcwhh.alert_note(es-es,VS.90).gifNota:

Si esta sobrecarga de método se utiliza para invocar un constructor de instancia, el objeto proporcionado para obj es reinicializado; es decir, se ejecutan todos los inicializadores de la instancia. El valor devuelto es nullNothingnullptrreferencia null (Nothing en Visual Basic). Si se invoca un constructor de clase, la clase es reinicializada; es decir, se ejecutan todos los inicializadores de la clase. El valor devuelto es nullNothingnullptrreferencia null (Nothing en Visual Basic).

a89hcwhh.alert_note(es-es,VS.90).gifNota:

A partir de .NET Framework versión 2.0 Service Pack 1, este método se puede usar para obtener acceso a los miembros no públicos si se ha concedido al llamador ReflectionPermission con el marcador ReflectionPermissionFlag..::.RestrictedMemberAccess y si el conjunto de permisos concedidos de los miembros no públicos se restringe al conjunto de permisos concedidos del llamador o a un subconjunto de los mismos. (Vea Consideraciones de seguridad sobre la reflexión.)

Para usar esta funcionalidad, el destino de la aplicación debe ser .NET Framework versión 3.5. Para obtener más información, vea Arquitectura de .NET Framework 3.5.

En los siguientes ejemplos se muestra la búsqueda dinámica de métodos mediante reflexión. Tenga en cuenta que no puede utilizar el objeto MethodInfo de la clase base para invocar el método reemplazado en la clase derivada, porque el enlace en tiempo de ejecución no puede resolver los reemplazos.

Visual Basic
Public Class A
    Public Overridable Function method() As Integer
        Return 0
    End Function
End Class

Public Class B
    Public Overridable Function method() As Integer
        Return 1
    End Function
End Class

Class Mymethodinfo

    Public Shared Function Main() As Integer
        Console.WriteLine("Reflection.MethodInfo")
        Console.WriteLine()
        Dim MyA As New A()
        Dim MyB As New B()

        'Get the Type and MethodInfo
        Dim MyTypea As Type = Type.GetType("A")
        Dim Mymethodinfoa As MethodInfo = MyTypea.GetMethod("method")

        Dim MyTypeb As Type = Type.GetType("B")
        Dim Mymethodinfob As MethodInfo = MyTypeb.GetMethod("method")

        'Get and display the Invoke method
        Console.WriteLine("First method - {0} returns {1}", MyTypea.FullName, _
            Mymethodinfoa.Invoke(MyA, Nothing).ToString())
        Console.WriteLine("Second method - {0} returns {1}", MyTypeb.FullName, _
           Mymethodinfob.Invoke(MyB, Nothing).ToString())
        Return 0
    End Function
End Class
C#
using System;
using System.Reflection;
using System.Windows.Forms;

public class A
{
    public virtual int method () {return 0;}
}

public class B
{
    public virtual int method () {return 1;}
}

class Mymethodinfo
{
    public static int Main()
    {
        Console.WriteLine ("\nReflection.MethodInfo");
        A MyA = new A();
        B MyB = new B();

        // Get the Type and MethodInfo.
        Type MyTypea = Type.GetType("A");
        MethodInfo Mymethodinfoa = MyTypea.GetMethod("method");

        Type MyTypeb = Type.GetType("B");
        MethodInfo Mymethodinfob = MyTypeb.GetMethod("method");

        // Get and display the Invoke method.
        Console.Write("\nFirst method - " + MyTypea.FullName +
            " returns " + Mymethodinfoa.Invoke(MyA, null));
        Console.Write("\nSecond method - " + MyTypeb.FullName +
            " returns " + Mymethodinfob.Invoke(MyB, null));
        return 0;
    }
}
Visual C++
#using <System.DLL>

using namespace System;
using namespace System::Reflection;

#define NULL 0
ref class A: public Object
{
public:
   virtual int method()
   {
      return 0;
   }

};

ref class B: public A
{
public:
   virtual int method() override
   {
      return 1;
   }

};

int main()
{
   A^ objA = gcnew A;
   B^ objB = gcnew B;
   Type^ typeA = objA->GetType();
   Type^ typeB = objB->GetType();
   MethodInfo^ methodA = typeA->GetMethod( L"method" );
   MethodInfo^ methodB = typeB->GetMethod( L"method" );
   Console::WriteLine( "\tUsing reflection to invoke A::method on objB returns {0}.", dynamic_cast<Object^>(methodA->Invoke( objB, nullptr )) );
   Console::WriteLine( "\tUsing Invoke on objB after converting to type A returns {0}.", dynamic_cast<Object^>(methodA->Invoke( dynamic_cast<A^>(objB), nullptr )) );
   Console::WriteLine( "\r\nThe same behavior is seen when the method " );
   Console::WriteLine( "is invoked without reflection:\r\n" );
   Console::WriteLine( "\tDirectly invoking B::method on objB returns {0}.", objB->method() );
   Console::WriteLine( "\tDirectly invoking B::method on objB after converting to type A returns {0}.", dynamic_cast<A^>(objB)->method() );
}

J#
import System.*;
import System.Reflection.*;
import System.Windows.Forms.*;

public class A
{
    public int Method()
    {
        return 0;
    } //Method
} //A

public class B
{
    public int Method()
    {
        return 1;
    } //Method
} //B

class MyMethodInfo
{
    public static void main(String[] args)
    {
        Console.WriteLine("\nReflection.MethodInfo");
        A myA =  new A();
        B myB =  new B();

        // Get the Type and MethodInfo.
        Type myTypeA = Type.GetType("A");
        MethodInfo myMethodInfoA = myTypeA.GetMethod("Method");

        Type myTypeB = Type.GetType("B");
        MethodInfo myMethodInfoB = myTypeB.GetMethod("Method");

        // Get and display the Invoke method.
        Console.Write(("\nFirst method - " + myTypeA.get_FullName() 
            + " returns " + myMethodInfoA.Invoke(myA, null)));
        Console.Write(("\nSecond method - " + myTypeB.get_FullName() 
            + " returns " + myMethodInfoB.Invoke(myB, null)));
    } //main
} //MyMethodInfo
JScript
public class A
{
   public function method () : int {return 0;}
}

public class B
{
   public function method () : int {return 1;}
}

class Mymethodinfo
{
   public static function Main() : void
   {
      Console.WriteLine ("\nReflection.MethodInfo");
      var MyA : A = new A();
      var MyB : B = new B();

      //Get the Type and MethodInfo
      var MyTypea : Type = Type.GetType("A");
      var Mymethodinfoa : MethodInfo = MyTypea.GetMethod("method");

      var MyTypeb : Type = Type.GetType("B");
      var Mymethodinfob : MethodInfo = MyTypeb.GetMethod("method");

      //Get and display the Invoke method
      Console.Write("\nFirst method - " + MyTypea.FullName +
         " returns " + Mymethodinfoa.Invoke(MyA, null));
      Console.Write("\nSecond method - " + MyTypeb.FullName +
         " returns " + Mymethodinfob.Invoke(MyB, null));
    }
}
Mymethodinfo.Main();

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile para Smartphone, Windows Mobile para Pocket PC, Xbox 360

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 3.5, 2.0, 1.0

XNA Framework

Compatible con: 2.0, 1.0
Contenido de la comunidad   ¿Qué es Community Content?
Agregar contenido nuevo RSS  Anotaciones
Processing
© 2009 Microsoft Corporation. Reservados todos los derechos. Términos de uso | Marcas Registradas | Privacidad
Page view tracker