如何给C#自动属性一个初始值?
我要么使用构造函数,要么恢复到旧语法。
使用构造函数:
class Person
{
public Person()
{
Name = "Initial Name";
}
public string Name { get; set; }
}
使用普通属性语法(具有初始值)
private string name = "Initial Name";
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
有更好的方法吗?
在C#6及以上版本中,您可以简单地使用语法:
public object Foo { get; set; } = bar;
请注意,要具有只读属性,只需省略集合,如下所示:
public object Foo { get; } = bar;
您还可以从构造函数中指定只读自动属性。
在此之前,我的回答如下。
我会避免在构造函数中添加默认值;将其留给动态赋值,并避免在变量赋值的两个点(即默认类型和构造函数中)。在这种情况下,我通常只写一个普通属性。
另一个选项是执行ASP.Net的操作,并通过属性定义默认值:
http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx
在C#6及以上版本中,您可以简单地使用语法:
public object Foo { get; set; } = bar;
请注意,要具有只读属性,只需省略集合,如下所示:
public object Foo { get; } = bar;
您还可以从构造函数中指定只读自动属性。
在此之前,我的回答如下。
我会避免在构造函数中添加默认值;将其留给动态赋值,并避免在变量赋值的两个点(即默认类型和构造函数中)。在这种情况下,我通常只写一个普通属性。
另一个选项是执行ASP.Net的操作,并通过属性定义默认值:
http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx
在C#9.0中添加了对init关键字的支持,这是一种非常有用且非常复杂的声明只读自动属性的方法:
声明:
class Person
{
public string Name { get; init; } = "Anonymous user";
}
~享受~使用:
// 1. Person with default name
var anonymous = new Person();
Console.WriteLine($"Hello, {anonymous.Name}!");
// > Hello, Anonymous user!
// 2. Person with assigned value
var me = new Person { Name = "@codez0mb1e"};
Console.WriteLine($"Hello, {me.Name}!");
// > Hello, @codez0mb1e!
// 3. Attempt to re-assignment Name
me.Name = "My fake";
// > Compilation error: Init-only property can only be assigned in an object initializer