C# строка в класс, из которого я могу вызывать функции

инициализировать класс строковой переменной в C#? Я уже узнал, как создать класс, используя строку

так что у меня уже есть:

Type type = Type.GetType("project.start");
var class = Activator.CreateInstance(type);

что я хочу сделать, это вызвать функцию в этом классе, например:

class.foo();

Это возможно? а если это как?

5 ответов

Type yourType = Type.GetType("project.start");
object yourObject = Activator.CreateInstance(yourType);

object result = yourType.GetMethod("foo")
                        .Invoke(yourObject, null);

Если вы можете предположить, что класс реализует интерфейс или базовый класс, который предоставляет метод Foo, то приведите класс соответствующим образом.

public interface IFoo
{
   void Foo();
}

тогда в своем коде вызова вы можете сделать:

var yourType = Type.GetType("project.start");
var yourObject = (IFoo)Activator.CreateInstance(yourType);

yourType.Foo();

Это возможно, но вам придется использовать отражение или иметь class быть приведенным как правильный тип во время выполнения..

Пример отражения:

type.GetMethod("foo").Invoke(class, null);

Activator.CreateInstance возвращает тип object, Если вы знаете тип во время компиляции, вы можете использовать универсальный CreateInstance.

Type type = Type.GetType("project.start");
var class = Activator.CreateInstance<project.start>(type);
var methodInfo = type.GetMethod("foo");
object result  = methodInfo.Invoke(class,null);

Второй аргумент метода Invoke - это параметры метода.

Другие вопросы по тегам