2017-05-05 62 views
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; 
    } 
} 
+0

「我發現自己在一個情況下,您可能能夠在switch語句中重構出來的代碼,也因此你可以有一些地方我想找出一個類和類的一個實例「。 - 讓我們更深入。你爲什麼想這樣做?也許有更好的方法來解決你的根本問題。 –

+0

基本上這是我的問題。真正的應用程序是更復雜的,但基本問題是這個序列化問題,我需要確定我可以序列化以便能夠反序列化。 –

+0

因此,您在序列化時在流中存儲了一個ID(用於類)和數據(用於實例),並且 - 在反序列化時 - 您需要奇蹟般地將該ID和數據恢復爲實例正確的班級......? –

回答

0

不是循環兩次,爲什麼不在第一個循環中執行第一個循環的功能?

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: 
       string serializationId = item.SerializationId; 
       // Do something with serializationId; 
       break; 
     } 
    } 
} 

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) 
    { 
     string serializationId = item.SerializationId; 
     // Do something with serializationId; 
    } 
} 
+0

你簡單化了這個例子。也許我不夠清楚,將會有更多派生類。我會更新這個問題。 –

相關問題