链接构造函数

时间:2015-02-26 21:55:14

标签: c# constructor chaining

我试图更好地理解C#中构造函数的链接,我遇到了以下问题。

class Item
{
    private string _name;
    private string _category;
    private int _sku;
    private double _price;

    // default values
    public Item()
    {
        _name = "";
        _category = "Sale Item";
        _sku = 123;
        _price = 1.99;
    }

    public Item(string name, double price) : this()
    {
        this._name = name;
        this._price = price;
    }

    public Item(string name, string category, int sku, double price)
    {
        this._name = name;
        this._category = category;
        this._sku = sku;
        this._price = price;
    }

    public string Name
    {
        get { return this._name; }
    }

    public string Category
    {
        get { return this._category; }
    }

    public int SKU
    {
        get { return this._sku; }

    public double Price
    {
        get { return this._price; }
    }
}

我的想法是使用无参数构造函数来设置默认值,并使用参数化构造函数来仅更改那些需要更新的值。

不幸的是,这不起作用。代码无法编译。错误消息是1729:没有构造函数接受2个参数。我意识到这不是构造函数通常被链接的方式,但是我不明白为什么这会无法编译,因为在调用第二个构造函数Item(字符串名称,双倍价格)之前首先调用无参数构造函数Item()。

非常感谢任何见解和意见。

1 个答案:

答案 0 :(得分:1)

链接构造函数本身没有任何问题,您获得的错误与其他代码相关,其中使用2个特定的参数进行实例化,这些参数不是特定的构造函数。

您需要添加另一个与该签名匹配的参数构造函数来修复该错误。