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]();