Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从无参数构造函数调用具有2个参数的构造函数?_C#_Constructor_Default Constructor - Fatal编程技术网

C# 如何从无参数构造函数调用具有2个参数的构造函数?

C# 如何从无参数构造函数调用具有2个参数的构造函数?,c#,constructor,default-constructor,C#,Constructor,Default Constructor,我在这件事上有困难。我有两个构造器。第一个有两个参数: public Instrument(string name, string category) { this.Name = name; this.Category = category; } 然后我有一个默认(无参数)构造函数,其中包含默认值的常量: public Instrument() { this.Name = DefaultName; this.Category = Defa

我在这件事上有困难。我有两个构造器。第一个有两个参数:

public Instrument(string name, string category)
{
    this.Name = name;
    this.Category = category;
}
然后我有一个默认(无参数)构造函数,其中包含默认值的常量:

public Instrument()            
{
    this.Name = DefaultName;
    this.Category = DefaultCategory;
}

我还应该从无参数构造函数调用2参数构造函数。我该怎么做?我还质疑为什么这是必要的。如果从默认值调用2参数,如何将默认值传递给应用程序?因此,我想我的主要问题是如何从默认构造函数调用2参数构造函数?

通过从默认构造函数调用两个参数构造函数,传递默认值,如下所示:

public Instrument() : this(DefaultName, DefaultCategory)
{

}

通过从默认构造函数调用两个参数构造函数,传递默认值,如下所示:

public Instrument() : this(DefaultName, DefaultCategory)
{

}

这就是你能做到的

public class Instrument
{
    public string Name;
    public string Category;

    public Instrument()
        : this("DefaultName", "DefaultCategory")
    {

    }

    public Instrument(string name, string category)
    {
        this.Name = name;
        this.Category = category;
    }
}
现在来回答为什么这是必要的

这是为了确保,如果您在代码中遇到实例化的对象,不管它是如何实例化的(使用任何一个构造函数),它的属性Name&Category中始终具有有效值


基本上,它可能使您的业务对象没有bug。任何使用您的业务对象的人在其属性中都将始终具有有效值-默认值或使用第二个构造函数传入的值。

这就是您可以做到的

public class Instrument
{
    public string Name;
    public string Category;

    public Instrument()
        : this("DefaultName", "DefaultCategory")
    {

    }

    public Instrument(string name, string category)
    {
        this.Name = name;
        this.Category = category;
    }
}
现在来回答为什么这是必要的

这是为了确保,如果您在代码中遇到实例化的对象,不管它是如何实例化的(使用任何一个构造函数),它的属性Name&Category中始终具有有效值


基本上,它可能使您的业务对象没有bug。任何使用您的业务对象的人在其属性中都将始终具有有效值-默认值或使用第二个构造函数传入的值。

关于将默认值传入默认构造函数:目的通常是通过类/库作者内置的常量提供默认值来简化类的使用。因此,寻求使用默认值的客户机只需调用无参数的构造函数,这就获得了不必提供2个参数的预期好处,除非她或他需要覆盖默认值。因此,在上面的“this”部分调用2个参数构造函数?但这只是为了通过默认设置?也许我想得太多了。我的意思是,如果你调用2参数构造函数,你将得到2个参数,而不是默认值。是的,这个关键字引用当前类,所以
this(arg1,arg2)
调用构造函数,传递默认值。这与用户调用传递默认信息的2参数构造函数基本相同,如果用户需要有关将默认值传递到默认构造函数的默认信息,则无需这样做:其目的通常是通过类/库作者内置的常量提供默认值来简化类的使用。因此,寻求使用默认值的客户机只需调用无参数的构造函数,这就获得了不必提供2个参数的预期好处,除非她或他需要覆盖默认值。因此,在上面的“this”部分调用2个参数构造函数?但这只是为了通过默认设置?也许我想得太多了。我的意思是,如果你调用2参数构造函数,你将得到2个参数,而不是默认值。是的,这个关键字引用当前类,所以
this(arg1,arg2)
调用构造函数,传递默认值。这与用户调用传递默认信息的2参数构造函数基本相同,只是如果用户需要默认信息,则不必这样做