自动特性值和默认值
本文关键字:默认值 | 更新日期: 2023-09-27 18:05:41
可能重复:
如何给C#自动属性一个默认值?
我在这样的类中有一处房产
public String fontWeight { get; set; }
我希望它默认为"Normal"
有没有一种方法可以用"自动"的方式而不是下面的
public String fontWeight {
get { return fontWeight; }
set { if (value!=null) { fontWeight = value; } else { fontWeight = "Normal"; } }
}
可以。
如果你正在寻找类似的东西:
[DefaultValue("Normal")]
public String FontWeight
{
get;
set;
}
在谷歌上搜索"使用.NET进行面向方面编程">
如果这对你来说太过分了,那就这样做:
private string fontWeight;
public String FontWeight {
get
{
return fontWeight ?? "Normal";
}
set {fontWeight = value;}
}
不,automatic属性只是一个普通的getter和/或setter以及一个后备变量。如果要在属性中放入任何类型的逻辑,则必须使用常规属性语法。
不过,您可以使用??
运算符来缩短它:
private string _fontWeight;
public String FontWeight {
get { return _fontWeight; }
set { _fontWeight = value ?? "Normal"; }
}
请注意,setter不用于初始化属性,因此如果您不在构造函数中设置值(或在变量声明中赋值(,则默认值仍然为null。你可以在getter中进行检查来绕过这个问题:
private string _fontWeight;
public String FontWeight {
get { return _fontWeight ?? "Normal"; }
set { _fontWeight = value; }
}
您将需要使用一个后备字段。
private string fontWeight;
public String FontWeight
{
get { String.IsNullOrEmpty(fontWeight) ? "Normal" : fontWeight;}
set {fontWeight = String.IsNullOrEmpty(value) ? "Normal" : value;}
}
您需要使用一个后备字段并将其初始化为默认值
private String fontWeight = "Normal";
public String FontWeight
{
get { return fontWeight; }
set { fontWeight = value; }
}
或者,保留auto属性并在构造函数中调用setter
public constructor()
{
FontWeight = "Normal";
}
public String FontWeight { get; set; }
一种方法是使用PostSharp,如下面对类似问题的回答所述。
您可以使用DefaultValue属性:
[DefaultValue("Normal")]
public string FontWeight { get; set; }
尽管它注意到
DefaultValueAttribute不会导致成员自动使用该属性的值进行初始化。您必须在代码中设置初始值。
因此,您可以将其与构造函数中的初始化结合使用,或者通过支持字段和默认处理来使用。
您需要一个这样的变量:
string fontWeight;
public string FontWeight
{
get
{
if (string.IsNullOrEmpty(fontWeight))
fontWeight = "Normal";
return fontWeight;
}
set { fontWeight = value; }
}
或者使用Constructer
设置初始值:
class FontClass
{
public string FontWeight { get; set; }
public FontClass()
{
FontWeight = "Normal";
}
}