2011-05-31 130 views
0

看起来这个问题经常被问到,但是仔细看过他们,我发现我仍然没有帮助。我正在进入oop的第一步,我需要创建一个具有“产品”属性的对象,该属性是“产品”类最多7个可能对象的数组。我只是很少理解{get; set;}方法,并且正在阅读它,但我希望能够在此处尝试使用的语法获得一些帮助。我正在使用C#。我的代码如下:创建一个对象数组?

public class Submission 
{ 

    public Submission() {} 
    public int SubmissionId {get;set;} 

    public int CustId {get;set;} 

    public int BroId {get;set;} 

    public int Coverage {get;set;} 

      public Array Products // what goes here? It's a mystery. 
} 

回答

1

在这种情况下,我认为你不想要一个自动实现的属性。相反,像这样做:

//backing store for your public property 
private Product[] _products = new Product[7]; 

public Product[] Products { get {return _products;}} 

,然后在构造函数中:

foreach(var item in _products) {item = new Product(); } 

你可以带一个私人二传手,而不是明确的后备存储做到这一点,但我认为这种方式更容易为就像设置阵列的大小一样。

请注意,我只为该属性提供了一个getter。你不需要一个setter,因为这将允许某人用一个全新的数组替换你的财产。只是提供一个吸气器仍然会允许某人操纵该财产。另外,通常我会为此推荐一个集合而不是数组,但由于您希望固定大小的项目数量可能更适合。

+0

为什么你更喜欢明确的支持领域而不是简单地使用私人二传手? – 2011-05-31 15:50:24

+0

@Anthony - 因为支持商店中的[7]。我会为列表和其他集合使用私有setter。其中1/6,1/2打,真的。 – 2011-05-31 16:02:01

-1

使用IList。您可以使用它的自动属性。

+0

为什么IList降低了投票率?我看到乔尔首先提出,然后编辑到另一种方法。任何IList的原因是一个坏主意? – 2011-06-01 05:32:30

0

你可以写这样的:

public Products[] { get; set; }

,并在类的构造函数:

public Submission() { Products = new Product[7]; }

1

如果达到使用泛型集合,我会用:

public List<Product> Products { get; private set; } 

或其一些变化。

+0

你可能不想为这个属性设置一个setter。 – 2011-05-31 15:41:47

+0

可能不是。更新后反映如此。 – BAKeele 2011-05-31 15:45:49