Я бы хотел динамически вызывать методы класса со значениями параметров, которые "анализируются" из строкового ввода.
Например:
Я хотел бы вызвать следующую программу с этими командами:
c:> myprog.exe Метод A System.Int32 777
c:> myprog.exe Метод A System.float 23.17
c:> myprog.exe MethodB System.Int32 & 777
c:> myprog.exe MethodC System.Int32 777 System.String ThisCanBeDone
static void Main(string[] args)
{
ClassA aa = new ClassA();
System.Type[] types = new Type[args.Length / 2];
object[] ParamArray = new object[types.Length];
for (int i=0; i < types.Length; i++)
{
types[i] = System.Type.GetType(args[i*2 + 1]);
// LINE_X: this will obviously cause runtime error invalid type/casting
ParamArray[i] = args[i*2 + 2];
MethodInfo callInfo = aa.GetType().GetMethod(args[0],types);
callInfo.Invoke(aa, ParamArray);
}
// В неизменяемой библиотеке классов:
публичный класс ClassA
{
public void MethodA (int i) {Console.Write (i.ToString ()); }
public void MethodA(float f) { Console.Write(f.ToString()); }
public void MethodB(ref int i) { Console.Write(i.ToString()); i++; }
public void MethodC(int i, string s) { Console.Write(s + i.ToString()); }
public void MethodA(object o) { Console.Write("Argg! Type Trapped!"); }
}
«LINE_X» в вышеприведенном коде - липкая часть. Во-первых, я не знаю, как присвоить значение для параметра int или ref int даже после того, как я его создаю с помощью Activator.CreatInstance или чего-то еще. На ум приходит typeConverter, но для этого также требуется явное приведение типов к компиляции.
Я смотрю на CLR с очками JavaScript или есть способ сделать это?