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

标签 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 没有实例化(我想原因很明显)。

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

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

最佳答案

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);

关于c# - 没有无参数构造函数的对象作为类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5214785/

相关文章:

c# - 我怎样才能在 C# 的异常中获取错误号而不是错误消息?

c# - 我需要更快的 .NET C# float 学运算(用于大数组的乘法和除法)

php - 如何构建 MySQL OR?

c++ - 我的对象在构造后立即被破坏

javascript - 根据特定条件创建对象

c++ - 当 RAII 不可能时,如何在 C++ 中执行 "try/finally"?

c# - 在另一个大图像中快速找到一个较小的图像

c# - 打开文件并加载它

bash - "plus colon"("+:") 在 shell 脚本表达式中是什么意思?

c# - 您如何将此查询转换为方法语法?