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。这对我来说确实是新的。虽然它不是必需的,但仍然可以认为它是好的风格。在那种情况下,“正确的语法”应该改为“我的首选语法”。尽管如此,我还是很高兴看到这样一件小事——它与回答问题没有直接关系,可以通过写一篇更“详细的评论”来解释-导致立即否决票。这就是事情应该如何运作的。我认为导致否决票的原因是你的不正确,这在我看来是合理的。请注意,我没有对你的答案投票。我从来没有听说过有人说省略可选参数不是好的风格。嗯,我不能因为“正常方法”而省略它们,所以要与…保持一致…没关系。。。