我不確定在C#中建模的最佳方式是什麼,我將嘗試解釋我想要做什麼。我連接到一個SOAP API(我無法控制),它返回幾種類型的實體。對於所有實體以及特定於某些類型的實體的其他一些實體,都有一些共享字段。實際上在任何常規繼承結構中都有幾個級別。展開子類中的父列表
當我通過API請求一個實體時,無論類型如何,我都必須發送我想要的字段列表和實體類型,然後我返回一個帶有這些字段值列表的通用實體對象。
我想重新創建我的其他系統中的原始類,保持繼承結構。我希望我的類具有特定於它們的字段的列表,以及特定於它們所繼承的父級的字段的列表。事情是這樣的:
public class BaseEntity
{
public virtual IEnumerable<string> Fields
{
get { return new List<string> {"field1"}; }
}
}
public class ChildEntity:BaseEntity
{
public virtual IEnumerable<string> Fields
{
get
{
var fields = new List<string> {"field2"};
fields.AddRange(base.Fields);
return fields;
}
}
}
像這樣的工作,或多或少,考慮到子類刪除父領域的風險(但將通過不假設你不能爲空部分進行清理整頓屬性中的值和處理)。這就是請求部分的樣子:
ApiRequest request = new ApiRequest()
request.Id = "1";
request.Type = "ChildEntity";
request.Fields = ChildEntity.Fields // This is what I want to get dynamically somehow
RemoteEntity remoteEntity = apiClient.Request(request);
ChildEntity childEntity = new ChildEntity(remoteEntity); // It parses the expected values
但是,字段列表實際上應該是靜態的。我想在向服務器發送字段請求之前訪問它,所以我沒有任何類實例,因此我不能使用這個繼承解決方案。你會建議什麼?
我認爲這不適用於更多級別的繼承,因爲您正在對父類型進行編碼。此外,隱藏父方法,可能會導致問題,但可能不會在這種情況下,當我從最具體的類中獲取字段。 (還是)感謝你的建議。 – MaQy
要獲取沒有類實例的字段數據,除了使用靜態成員之外別無選擇。我添加了使用反射的第二個示例,它避免直接引用父類,但仍使用靜態成員。 – agentnega