没有默认构造函数的默认值

时间:2016-03-26 17:25:07

标签: c#

当省略默认构造函数时,该类型的数据成员如何获取其默认值,并且如果它们被赋予默认值,那么首先使用默认构造函数是什么?

class Program
{
    static void Main(string[] args)
    {
        Person person = new Person("SomeName");
        Console.WriteLine(person.Age);
        Console.WriteLine(person.FamileName == null);
    }
}

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string FamileName { get; set; }

    public Person(string name)
    {
        Name = name;
    }
}

编辑: 这是我读过的一本书,这让我觉得默认构造函数负责给数据成员提供默认值,但似乎我弄错了,这只是我修改这些值的一种方法。我需要,如果我错了,请纠正我。

  

每个C#类都提供了一个“免费”默认构造函数,您可以根据需要重新定义。根据定义,   默认构造函数永远不会接受参数。将新对象分配到内存后,默认为   构造函数确保将类的所有字段数据设置为适当的默认值

3 个答案:

答案 0 :(得分:0)

如果您不使用构造函数或字段初始化(对于属性也是如此),则不会使用默认值来初始化对象字段。

默认值usualy对应于设置为零的所有位(引用类型为null,数字类型为0)。

您可以使用构造函数设置其他值:

public Person()
{
    Name = "Sebastian";
}

或初始化程序:

public string Name { get; set; } = "Sebastian";

答案 1 :(得分:0)

在C#中,您可以指定默认值。

class Person
{
    public string Name { get; set; } ="Someone";
    public int Age { get; set; }
    public string FamileName { get; set; }
}

如果要在对象初始化中指定值,可以执行以下操作:

class Program
{
    static void Main(string[] args)
    {
        Person person = new Person { Name= "SomeOne"; Age=16; };
        Console.WriteLine(person.Age);
        Console.WriteLine(person.FamileName == null);
    }
}

如果只需要指定值或默认值,则不需要构造函数。你可以用上面提到的方法做到这一点。 当我需要做一些额外的任务时,我通常使用构造函数,例如数据库连接,设置其他对象等。

链接:https://msdn.microsoft.com/en-us/library/bb397680.aspx

答案 2 :(得分:0)

您班级中的成员将使用其默认值进行初始化。对于参考类型,这是null,对于值类型,它是默认值。在一个对象中成为成员没有什么特别之处 - 如果它们位于一个函数的中间,它们将具有相同的值:

public void Foo()
{
    string name; // null
    int age; // 0
    bool isChild; // false
}

对于默认构造函数,它是确保数据类型安全的好地方。例如,您可能希望将任何引用类型的属性初始化为非空值:

class Widget
{
    public string Name { get; set; }
    public Widget() 
    {
        Name = string.Empty; // this way someone can call Widget.Name safely
    }
}

在相关说明中,您还应该看到:How do you give a C# Auto-Property a default value?