簡體   English   中英

基於動態實例在運行時訪問類屬性

[英]Access class property at run-time based on dynamic instantiation

我有以下課程:

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;
}

您可以使用Dictionary<string, Func<IPerson>> ,將其初始化一次,然后用於創建適當的實例:

private Dictionary<string, Func<IPerson>> _initializers = new Dictionary<string, Func<IPerson>>() {
    { "Manager", () => new Manager() },
    { "Employee", () => new Employee() }
}
string externalValue;
var person = _initializers[externalValue]();

看來您正在嘗試創建依賴關系注入(DI)系統。

依賴項注入是一種軟件設計模式,它允許刪除硬編碼的依賴項,並可以在運行時或編譯時更改它們

http://en.wikipedia.org/wiki/Dependency_injection

建議您不要研究現有的DI系統,而不是重新發明輪子。 對於一個很好的概述,看看

主要C#DI / IoC框架如何比較?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM