序列化非实例化的类

时间:2014-12-08 05:51:38

标签: c# winforms class serialization

我有一个课程,我用来为我的应用程序保存各种数据。我从来没有实际实例化该类,因为我希望可以从所有表单访问数据。我想序列化这个类,但除非我创建它的实例,否则它不会允许我。有没有办法绕过这个或者更好的方式来完成我想要做的事情?

这是班级:

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

3 个答案:

答案 0 :(得分:2)

你可能在这里需要Singleton,Singleton是具有私有构造函数的类。 在构造函数中启动类变量。

让我为类Items做一些代码作为Singleton:

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

查看此问题中的单身人士模式

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

答案 1 :(得分:0)

我并不是说这是一个很好的方法,但在这种情况下,我总是创建一个与所有表单共享的对象。在您的示例中,该类将是&#39; Items&#39;。创建此对象的实例(例如,当应用程序启动时),然后在打开它们时将此对象传递给所有表单。

这是迄今为止在应用程序中保持持久性的最简单方法。

答案 2 :(得分:0)

我不知道你的IDE中是否有这样的方法,但在Xamarin中,当为移动设备编程时,你可以通过某个名称注册一个类。使用

using System;

namespace myApplication

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

您可以在整个程序中注册该类,这样您就可以在任何地方调用类中的属性和方法,而无需实例化该类。