我怎样才能在它的创作上得到一个对象?

时间:2016-12-29 13:15:36

标签: c# oop

我想知道如何在它的创作上得到一个对象。我有两个类,一个名为Product的类,另一个名为Inventory的类,它是一个静态类。 以下是产品类别的定义:

public class Product
{       
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public int Quantity { get; set; }
}

这里是Inventory类的定义:

public static class Inventory
{
    public static List<Product> Products { get; set; }   
}

我想做的是以下内容,当创建了Product类型的对象时,此对象应添加到Inventory.Products列表中,以便稍后我可以查询库存信息。

我希望能够在Product类中执行类似的操作:

public class Product
{
    public Product()
    {
        Inventory.Products.Add(this);            
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public int Quantity { get; set; }
}

但是,如果我使用构造函数执行此操作,我将获得NullReferenceException,因为Products尚未初始化。初始化静态Products列表的最佳位置在哪里?

2 个答案:

答案 0 :(得分:1)

空引用不是Product,而是列表。只需在尝试使用静态列表之前初始化静态列表。它自己的类静态初始化程序将是一个很好的地方:

public static class Inventory
{
    public static List<Product> Products { get; set; }   

    static Inventory()
    {
        Products = new List<Product>();
    }
}

答案 1 :(得分:1)

初始化静态属性有不同的可能性。例如,您可以使用只读后备字段:

public static class Inventory
{
    private static readonly List<Product> products = new List<Product>();
    public static List<Product> Products { get { return products; } }
}

从C#6开始,您可以使用readonly属性:

public static class Inventory
{        
    public static List<Product> Products { get; } = new List<Product>();
}

或(已建议David)您可以使用静态构造函数:

public static class Inventory
{        
    public static List<Product> Products { get; private set; }
    static Inventory()
    {
         Products = new List<Product>();
    }
}