自动特性值和默认值

本文关键字:默认值 | 更新日期: 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";
    }
}