繁体   English   中英

如何使用C#中的用户输入访问构造函数

[英]How do I access a constructor with user input in C#

在我的程序中,我有特定类Tracer的多个实例(A1,B2,C3等)。 使用名为tracerListBox的列表框,用户将确定他们要使用的跟踪器。

可以说每个跟踪器都有一个名为family的构造函数。

我知道,如果我想访问A1族,只需输入:

    A1.family

但是,我想编写完成以下操作的代码:

    tracerListBox.Text.family

有没有一种方法可以将用户确定的值传递给构造函数? 我本质上是希望用户确定要使用哪个类示踪剂实例,然后使用该信息提取有关该特定示踪剂的所有信息。

在此先感谢您提供的任何帮助。

您正在寻找的是工厂方法 ,有时也称为虚拟构造函数 (在技术上不正确,因为它既不是构造函数也不是虚拟方法)。

而不是调用构造函数,而是调用静态方法,该方法调用由传入的参数确定的类的构造函数。

interface ITracer {
    void Trace(string s);
}
class TracerA : ITracer {
    public void Trace(string s) {
        // ...
    }
}
class TracerB : ITracer {
    public void Trace(string s) {
        // ...
    }
}
class TracerFactory {
    public static ITracer Make(string name) {
        if (name.Equals("A")) return new TracerA();
        if (name.Equals("B")) return new TracerB();
        throw new ApplicationException("Unknown: "+name);
    }
}

您的问题中缺少许多实际做出决定的细节。 但是,我们可以为您指出可能会回答您问题的一般方向。

  • 反思肯定会有所帮助。 查看object.GetType()以启动。
  • 签出不同的依赖注入控制反转(IOC)库。 它们可能正是您所需要的。

您是否正在寻找这样的东西:

string myType = "MyNamespace." + tracerListBox.Text + ", MyAssembly";
var = Type.GetType( myType );
var property = t.GetProperty("family", BindingFlags.Static);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM