Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.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#类构造函数默认值问题_C# - Fatal编程技术网

C#类构造函数默认值问题

C#类构造函数默认值问题,c#,C#,我有以下课程: public class Topic { public string Topic { get; set; } public string Description { get; set; } public int Count { get; set; } } 当使用以下内容创建类时,我希望将计数始终设置为零: var abc = new Topic { Topic = "test1", Description

我有以下课程:

public class Topic
    {
        public string Topic { get; set; }
        public string Description { get; set; }
        public int Count { get; set; }
    }
当使用以下内容创建类时,我希望将计数始终设置为零:

var abc = new Topic {
  Topic = "test1",
  Description = "description1"
}

我对构造函数有点困惑。这是可能的,还是我在创建abc时需要指定主题、描述和计数?

int的默认值为0

所有值类型都有默认值,因为它们不能为
null


请参阅此MSDN页面上的。

计数在初始化时将默认为
0
,因为它是一种值类型,不能为
null

您有几个不同的选项

1)
int
默认为零,因此如果不初始化它,它将为零

2) 您可以使用构造函数

public Topic(){ Count = 0;}
3) 您可以使用备份字段而不是自动属性,并将其初始化为零

 private int _count = 0;
 public int Count {
    get  {return _count}
    set {_count = value; }
 }

编辑

正如我从对这个答案的评论中了解到的,在初始化器调用中省略
()
是完全有效的

正确的语法将是我首选的语法仍然是:

var abc = new Topic() {
  Topic = "test1",
  Description = "description1"
}
(注意
()

这将把
Count
初始化为0,因为0是
int
的默认值。如果要始终指定主题和说明,请添加显式构造函数:

public Topic(string topic, string description)
{
    Topic = topic;
    Description = description;
    // You may also set Count explicitly here, but if you want "0" you don't need to
}
var abc = new Topic {
  Topic = "test1",
  Description = "description1"
}

以下习语不仅是构造函数:

public Topic(string topic, string description)
{
    Topic = topic;
    Description = description;
    // You may also set Count explicitly here, but if you want "0" you don't need to
}
var abc = new Topic {
  Topic = "test1",
  Description = "description1"
}
它是一个构造函数和一个对象初始值设定项

实际情况是首先调用
newtopic()
,从而将所有值初始化为其默认值(property-Topic为null,Description为null,Count为0)。之后,值“test1”被分配给Topic,值“description1”被分配给Description

所有值类型的默认值都不同于null(因为它们不能为null),引用类型的默认值为null。

公共类程序 { 公共静态void Main() {

}

公共班级学生姓名 {


}

这对我来说是个好消息。字符串和布尔值怎么样?它们是否默认为“”false?@Geraldo-否。字符串是引用类型,因此它们默认为
null
。有没有办法将字符串设置为默认值,或者我必须指定每个字符串?@Geraldo-您可以使用无参数构造函数,但您仍需要依次设置每个字符串。没有神奇的方法可以更改这些默认值。Huh??OP没有在他的“构造函数调用”中放一个空参数列表-我给他指出了这一点,因为我不能使源代码加粗,所以注意到了我的更改,以便他更容易看到。这给了我一个-1?@Thorsten Dittmar:你是否有
()或不在语法中,它没有任何区别。检查IL。这对我来说确实是新的。虽然它不是必需的,但仍然可以认为它是好的风格。在那种情况下,“正确的语法”应该改为“我的首选语法”。尽管如此,我还是很高兴看到这样一件小事——它与回答问题没有直接关系,可以通过写一篇更“详细的评论”来解释-导致立即否决票。这就是事情应该如何运作的。我认为导致否决票的原因是你的不正确,这在我看来是合理的。请注意,我没有对你的答案投票。我从来没有听说过有人说省略可选参数不是好的风格。嗯,我不能因为“正常方法”而省略它们,所以要与…保持一致…没关系。。。