如何从字符串创建类并调用它的方法?

时间:2018-05-22 06:15:57

标签: c#

我正在尝试从用户接收字符串输入和整数输入,然后使用这些输入来调用具有特定参数的方法。 例如:

string object_name   = Dog;
int method_parameter = 5;

object_name.Bark(method_parameter);

以下是实际代码:

Console.WriteLine("Please Enter Your First Name. ");
string namez = Console.ReadLine();

Console.WriteLine("Enter 1 to sign in or 2 to sign out. ");
int ez = Console.ReadLine();

Console.WriteLine("Please Enter Your Pin.");
int inpu_pin = int.Parse(Console.ReadLine());

if (ez == 1)
    namez.OnSignIn(inpu_pin);
if (ez == 2)
    namez.OnSignOut(inpu_pin);

1 个答案:

答案 0 :(得分:0)

更好的方法是使用Factory method pattern可以返回你的对象。

public class Factory
{
  public static object GetAnimal(string objectName)
  {
    if(objectName == "Dob")
     return new Dog();
    else(objectName == "xyz")
     return new xyz(); 
  } 
}

或者您可以为所有动物类型创建父接口,并且工厂的返回值应该是接口类型而不是对象。

然后这样做

  // reflection
  Object obj = Factory.GetAnimal(args[0]).GetType(); //args[0]="Dog"
  obj.GetMethod("Bark").Invoke(obj,  new object[]{ int.Parse(args[1] });

你必须利用反射,必须这样做

System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(string className)

或者如果您知道完全限定名称,请执行此操作

string typeName = args[0]; //"Dog";
string formTypeFullName = string.Format("{0}.{1}", this.GetType().Namespace, typeName);
Type type = Type.GetType(formTypeFullName, true);
Dog dog = (Dog)Activator.CreateInstance(type);
dog.Bark(int.Parse(args[1]));