我有一个课程,我用来为我的应用程序保存各种数据。我从来没有实际实例化该类,因为我希望可以从所有表单访问数据。我想序列化这个类,但除非我创建它的实例,否则它不会允许我。有没有办法绕过这个或者更好的方式来完成我想要做的事情?
这是班级:
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>();
}
}
答案 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" });
查看此问题中的单身人士模式
答案 1 :(得分:0)
我并不是说这是一个很好的方法,但在这种情况下,我总是创建一个与所有表单共享的对象。在您的示例中,该类将是&#39; Items&#39;。创建此对象的实例(例如,当应用程序启动时),然后在打开它们时将此对象传递给所有表单。
这是迄今为止在应用程序中保持持久性的最简单方法。
答案 2 :(得分:0)
我不知道你的IDE中是否有这样的方法,但在Xamarin中,当为移动设备编程时,你可以通过某个名称注册一个类。使用
using System;
namespace myApplication
[Register ("AppDelegate")]
public partial class AppDelegate
{
}
您可以在整个程序中注册该类,这样您就可以在任何地方调用类中的属性和方法,而无需实例化该类。