c # строка в класс, из которого я могу вызывать функции - PullRequest
1 голос
/ 20 декабря 2010

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

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

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

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

class.foo();

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

Ответы [ 5 ]

4 голосов
/ 20 декабря 2010
Type yourType = Type.GetType("project.start");
object yourObject = Activator.CreateInstance(yourType);

object result = yourType.GetMethod("foo")
                        .Invoke(yourObject, null);
2 голосов
/ 20 декабря 2010

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

public interface IFoo
{
   void Foo();
}

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

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

yourType.Foo();
1 голос
/ 20 декабря 2010

Возможно, но вам придется использовать отражение или иметь class для приведения в качестве правильного типа во время выполнения.

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

type.GetMethod("foo").Invoke(class, null);
0 голосов
/ 20 декабря 2010
var methodInfo = type.GetMethod("foo");
object result  = methodInfo.Invoke(class,null);

Вторым аргументом метода Invoke являются параметры метода.

0 голосов
/ 20 декабря 2010

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

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