2011-03-07 133 views
2

的属性,因此我有一个名为FixedSizeList的对象,没有一个参数的构造函数。对象无参数的构造函数为

看起来像这样。

class FixedSizeList<T> 
{ 
    public FixedSizeList(Int32 size) 
    { 
     this.Size = size; 
     this._Array = new T[size]; 
    } 
} 

现在我想用这个对象作为另一个类的属性。

public FixedSizeList<Card> CardList { get; set; } 

我注意到我可以用事实来声明属性的构造函数。

public new FixedSizeList<Card> CardList { get; set; } 

但问题是,FixedSizeList没有实例化(我猜是显而易见的原因)。

所以我不应该要么得到一个编译时错误(像“申报对象无参数的构造函数”),该代码或INFACT以某种方式能够声明中的属性参数?

有人能解释一下是怎么回事,如果有办法解决这个问题吗?(很明显,我可以在第二个对象的构造函数中完成所有这些,但我正在尝试查看其他技术)。

回答

9

new放在属性的前面并不会导致属性的setter在初始化时被神奇地调用,并且传递了该类型的新实例(这对于一个小小的关键字来说会有相当大的影响!)

相反,它是用来hide a member with the same name on a base class

如果你想你的财产返回一个新的实例的权利的时候,你需要给它多数民众赞成初始化的后盾:

public FixedSizeList<Card> CardList 
{ 
    get { return _cardList; } 
    set { _cardList = value; } 
} 

private FixedSizeList<Card> _cardList = new FixedSizeList<Card>(99999999); 
+0

所以你是说在C#中的新关键字在这方面更像是一个影子? – 2011-03-07 01:25:05

+0

@Maxim不完全一样,但类似的是。 – 2011-03-07 01:27:09

+0

哇,VB和C#真的是两种不同的动物......谢谢你的帮助! – 2011-03-07 01:30:12

0

你想要做的是一个工厂

你需要的东西这将返回一个实例的对象,你的类中的静态方法

public static FixedListSize GetInstance() { 
    return new FixedListSize(); 
} 

我不记得但如果你必须标记班级为静态的,我认为你可能有至。它逃脱我的那一刻:\

相关问题