0
我並沒有真正爲這個問題找到一個好的標題,但它如下所示。我發現自己處於一個想要確定班級和班級實例的情況。我的解決方案是爲該類使用const
值,併爲該實例返回const
值。用一種方法確定派生類和實例
我不知道是否有更好的解決方案。這感覺有點奇怪,我需要兩種方法來識別和重用值。有沒有更好的辦法?
下面的僞代碼。在實際的應用程序中,將會有更多來自基類的類,並且列表也將包含這些類的實例。反序列化發生在啓動時,在由於用戶活動而改變列表之後的關閉後序列化。
static void Main(string[] args)
{
List<Base> objects = new List<Base>();
List<string> serializationIds = new List<string>();
// SerializationIds initialized somehow
foreach (var serializationId in serializationIds)
{
switch(serializationId)
{
// Identify class
case Derived.SerializationIdText:
objects.Add(new Derived());
break;
}
}
// add remove objects
foreach (var item in objects)
{
// Identify instance
string serializationId = item.SerializationId;
// Do something with serializationId;
}
}
public abstract class Base
{
public string SerializationId { get; set; }
}
public class Derived : Base
{
public const string SerializationIdText = "DatabaseExplorer";
public Derived()
{
SerializationId = SerializationIdText;
}
}
「我發現自己在一個情況下,您可能能夠在switch語句中重構出來的代碼,也因此你可以有一些地方我想找出一個類和類的一個實例「。 - 讓我們更深入。你爲什麼想這樣做?也許有更好的方法來解決你的根本問題。 –
基本上這是我的問題。真正的應用程序是更復雜的,但基本問題是這個序列化問題,我需要確定我可以序列化以便能夠反序列化。 –
因此,您在序列化時在流中存儲了一個ID(用於類)和數據(用於實例),並且 - 在反序列化時 - 您需要奇蹟般地將該ID和數據恢復爲實例正確的班級......? –