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);
解决方案
更好的方法是利用工厂方法模式可以返回你的对象。
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]));
推荐阅读
- python - 使用 HuggingFace 转换器,如何在生成文本时返回多个样本?
- java - Kubernetes:如何获取应用程序的线程转储
- angular - 错误:ngcc 已经在 id 为 14828 的进程中运行
- angular - Angular 表单在不同组件中的工作方式不同
- authentication - 令牌身份验证 - 启用或禁用匿名身份验证
- r - mapply 错误:“length.out”必须是非负数
- r - 使用 R [文本分析] [n-gram] 组合相似的字符串
- python - 如何读取文本文件中的特定单词?
- r - 在 R 中将 .CSV 文件添加为 Excel 表格
- amazon-web-services - 用于检查资源标签的 Clarity Terraform 测试