Как сделать динамическое создание объектов и вызов метода в .NET 3.5

Как выглядит код, который создаст объект класса:

string myClass = "MyClass";

из вышеуказанного типа, а затем вызовет

string myMethod = "MyMethod";

На этот объект?

Ответ на: "Как сделать динамическое создание объектов и вызов метода в .NET 3.5"

Количество ответов:4

Пример, но без проверки ошибок:

using System;
using System.Reflection;

namespace Foo
{
    class Test
    {
        static void Main()
        {
            Type type = Type.GetType("Foo.MyClass");
            object instance = Activator.CreateInstance(type);
            MethodInfo method = type.GetMethod("MyMethod");
            method.Invoke(instance, null);
        }
    }

    class MyClass
    {
        public void MyMethod()
        {
            Console.WriteLine("In MyClass.MyMethod");
        }
    }
}

Каждый шаг нуждается в тщательной проверке - вы не можете найти тип, он не может иметь параметрический конструктор, вы не можете найти метод, вы можете вызвать его с неправильными типами аргументов.

Одна вещь, чтобы отметить: Type.GetType (строка) нуждается в сборке квалифицированного имени типа, если он находится в настоящее время выполнения сборки или mscorlib.

Следующее предполагает объект с общественным конструктором и общедоступным методом, который возвращает определенное значение, но не принимает параметров.

var object = Activator.CreateInstance( "MyClass" );
var result = object.GetType().GetMethod( "MyMethod" ).Invoke( object, null );

Если предположить, что ваш класс находится в вашей исполнительной сборке, ваш конструктор и ваш метод не имеет параметров.

Type clazz = System.Reflection.Assembly.GetExecutingAssembly().GetType("MyClass");

System.Reflection.ConstructorInfo ci = clazz.GetConstructor(new Type[] { });
object instance = ci.Invoke(null); /* Send parameters instead of null here */

System.Reflection.MethodInfo mi = clazz.GetMethod("MyMethod");
mi.Invoke(instance, null); /* Send parameters instead of null here */
В проекте вы найдете Wiki page with the usage, or you can also check this , или вы также можете проверить это article in CodeProject

Используя мою библиотеку, ваш пример будет выглядеть следующим образом:

IOperationInvoker myClass = BindingFactory.CreateObjectBinding("MyClassAssembly", "MyClass");
myClass.Method("MyMethod").Invoke();

Или еще короче:

BindingFactory.CreateObjectBinding("MyClassAssembly", "MyClass")
     .Method("MyMethod")
     .Invoke();

Он использует беглый интерфейс, и действительно упрощает этот вид операций. Я надеюсь, что вы могли бы найти его полезным.

Я создал библиотеку, которая упрощает динамическое создание объектов и вызов с помощью .NET вы можете скачать библиотеку и код в коде Google: Late Binding Helper In the project you will find a