2014-12-08 46 views
0

我有一個類,我正在使用它來保存我的應用程序的各種數據。我從來沒有真正實例化類,因爲我希望可以從所有表單訪問數據。我想序列化這個類,但它不會讓我去除非我創建它的一個實例。有沒有辦法解決這個問題,或者更好的方法來完成我想要做的事情?序列化一個非實例化的類

這裏是類:

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Runtime.Serialization; 
using System.IO; 

namespace Man 
{ 
    public class ListProduct 
    { 
     public string Name; 
     public int Quantity; 
     public decimal Cost; 
     public DateTime Date; 
    } 

    public class Product 
    { 
     public string Name; 
     public bool IsCompound; 
     public decimal BuyPrice; 
     public decimal SellPrice; 
     public List<ListProduct> SubItems = new List<ListProduct>(); 
    } 

    public class ListEmployee 
    { 
     public string FirstName; 
     public string LastName; 
     public decimal Cost; 
     public decimal Hours; 
     public DateTime Date; 
    } 

    public class Employee 
    { 
     public string FirstName; 
     public string LastName; 
     public decimal Wage; 
    } 

    [Serializable()] 
    public class Items : ISerializable 
    { 
     public static List<Product> ProdList = new List<Product>(); 
     public static List<Employee> EmpList = new List<Employee>(); 

     public static List<ListProduct> BuyList = new List<ListProduct>(); 
     public static List<ListProduct> SellList = new List<ListProduct>(); 

     public static List<ListEmployee> EmpHours = new List<ListEmployee>(); 
    } 
} 

回答

2

你可能需要辛格爾頓在這裏,辛格爾頓是類有私有構造。 在構造函數中啓動您的類變量。

讓我Items類做的碼位爲辛格爾頓:

public class Items 
{ 
    public readonly List<Product> ProdList; 
    public readonly List<Employee> EmpList; 
    public readonly List<ListProduct> BuyList; 
    public readonly List<ListProduct> SellList; 
    public readonly List<ListEmployee> EmpHours; 

    private static Items _Instance; 

    private Items() 
    { 
     ProdList = new List<Product>(); 
     EmpList = new List<Employee>(); 
     BuyList = new List<ListProduct>(); 
     SellList = new List<ListProduct>(); 
     EmpHours = new List<ListEmployee>(); 
    } 

    public static Items Instance 
    { 
     get { return _Instance ?? (_Instance = new Items()); } 
    } 
} 

現在Items具有財產Instance這將有Items單個對象,並通過這個屬性,你可以訪問所有Items類的公共屬性。

Items.Instance.ProdList.Add(new Product { Name = "Name of product" }); 

在這個問題上退房Singleton模式

https://stackoverflow.com/a/2667058/2106315

0

我並不是說這是做的一個很好的方式,但在這種情況下,我總是創建一個對象,我和所有分享表格。在你的例子中,這將是類'項目'。創建此對象的一個​​實例(例如應用程序啓動時),然後在打開它們時將此對象傳遞給所有窗體。

這是迄今爲止在應用程序中擁有一些持久性的最簡單方法。

0

我不知道在IDE中是否有這樣的方法,但在Xamarin中,當爲移動設備編程時,可以通過某個名稱註冊一個類。使用

using System; 

namespace myApplication 

[Register ("AppDelegate")] 
public partial class AppDelegate 
{ 
} 

您可以在程序中註冊該類,以便您可以在任何地方調用該類中的屬性和方法,而無需實例化該類。