C# 基于动态实例化在运行时访问类属性

C# 基于动态实例化在运行时访问类属性,c#,C#,我有以下课程: public Employee : IPerson { public string Name { get; set; } } public Manager : IPerson { public string Name { get; set; } } 在运行时,我可能需要: var person = new Manager(); 或者可能: var person = new Employee(); 然后: string name = person.Name; 在某

我有以下课程:

public Employee : IPerson
{
  public string Name { get; set; }
}

public Manager : IPerson
{
  public string Name { get; set; }
}
在运行时,我可能需要:

var person = new Manager();
或者可能:

var person = new Employee();
然后:

string name = person.Name;
在某个时刻。我目前使用的是Activator.CreateInstance(),但我想知道是否错误地处理了这个问题?类的类型是在运行时听写的,所以我没有高级注意

我希望避免这样的事情:

string externalValue;
var person;

switch (externalValue)
{
  case "Manager":
    person = new Manager();
    break;
  case "Employee":
    person = new Employee();
    break;
}

您可以使用
字典
,初始化它一次,然后使用创建适当的实例:

private Dictionary<string, Func<IPerson>> _initializers = new Dictionary<string, Func<IPerson>>() {
    { "Manager", () => new Manager() },
    { "Employee", () => new Employee() }
}

看起来您正在尝试创建依赖项注入(DI)系统

依赖项注入是一种软件设计模式,它允许删除硬编码的依赖项,并允许在运行时或编译时更改它们

与其重新发明轮子,我建议您看看现有的DI系统。要获得良好的概述,请查看


这个问题对我来说还不清楚。你是想避开开关吗?还是神奇的琴弦?或者你想避免使用'new'关键字进行实例化?我试图避免上述所有操作,实际上.OP试图避免使用神奇字符串。这会将神奇字符串从开关移动到字典键。
string externalValue;
var person = _initializers[externalValue]();