自动属性值和默认值

时间:2011-08-15 10:30:59

标签: c# default-value

  

可能重复:
  How do you give a C# Auto-Property a default value?

我在类似的属性中有一个属性

public String fontWeight { get; set; }

我希望它默认为"Normal"

有没有办法以“自动”样式而不是以下

执行此操作
public String fontWeight {
    get { return fontWeight; } 
    set { if (value!=null) { fontWeight = value; } else { fontWeight = "Normal"; } }
}

7 个答案:

答案 0 :(得分:13)

是的,你可以。

如果您正在寻找类似的内容:

[DefaultValue("Normal")]
public String FontWeight
{
    get;
    set;
}

谷歌搜索“使用.NET进行面向方面编程”

..如果这样做太过分了,你可以这样做:

private string fontWeight;
public String FontWeight {
    get
    {
        return fontWeight ?? "Normal";
    }
    set {fontWeight = value;} 
}

答案 1 :(得分:10)

不,自动属性只是一个普通的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; }
}

答案 2 :(得分:2)

您需要使用支持字段。

private string fontWeight;
public String FontWeight 
{ 
    get { String.IsNullOrEmpty(fontWeight) ? "Normal" : fontWeight;}
    set {fontWeight = String.IsNullOrEmpty(value) ? "Normal" : value;} 
}

答案 3 :(得分:2)

您需要使用支持字段并将其初始化为默认值

private String fontWeight = "Normal";
public String FontWeight
{
    get { return fontWeight; }
    set { fontWeight = value; }
}

或者,保留auto属性并在构造函数中调用setter

public constructor()
{
    FontWeight = "Normal";
}

public String FontWeight { get; set; }

答案 4 :(得分:1)

一种方法是使用this answer中详述的PostSharp来解决类似的问题。

答案 5 :(得分:1)

您可以使用DefaultValue属性:

    [DefaultValue("Normal")]
    public string FontWeight { get; set; }

虽然它注意到了

  

DefaultValueAttribute不会导致使用属性的值自动初始化成员。您必须在代码中设置初始值。

因此您可以将它与构造函数中的初始化结合使用,也可以通过支持字段和默认处理结合使用。

答案 6 :(得分:0)

你需要一个像这样的变量:

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";
    }
}