所以我有一个名为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没有实例化(我猜是显而易见的原因)。
所以我不应该为这段代码得到一个编译时错误(例如“没有为对象声明的无参数构造函数”),或者事实上能以某种方式在属性中声明参数?
有人可以解释一下发生了什么,以及是否有某种方法可以解决这个问题?(显然我可以在第二个对象的构造函数中完成所有这些,但我正在尝试查看其他技术)。
答案 0 :(得分: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);
答案 1 :(得分:0)
你想做的事情是工厂
你需要一个静态方法,它会在你的类
中返回一个对象的实例public static FixedListSize GetInstance() {
return new FixedListSize();
}
我不记得了,如果你必须将课程标记为静态,我认为你可能必须这样做。它现在正在逃避我:\