没有无参数构造函数的对象作为类的属性

时间:2011-03-07 01:14:05

标签: c# syntax constructor properties

所以我有一个名为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没有实例化(我猜是显而易见的原因)。

所以我不应该为这段代码得到一个编译时错误(例如“没有为对象声明的无参数构造函数”),或者事实上能以某种方式在属性中声明参数?

有人可以解释一下发生了什么,以及是否有某种方法可以解决这个问题?(显然我可以在第二个对象的构造函数中完成所有这些,但我正在尝试查看其他技术)。

2 个答案:

答案 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();
}

我不记得了,如果你必须将课程标记为静态,我认为你可能必须这样做。它现在正在逃避我:\