关于c#:自动属性值和默认值

Automatic Property Values and Defaults

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How do you give a C# Auto-Property a default value?

我在这样的班级里有一个财产

1
public String fontWeight { get; set; }

我想默认是"Normal"

有没有一种方法可以用"自动"的方式来完成,而不是用下面的方式

1
2
3
4
public String fontWeight {
    get { return fontWeight; }
    set { if (value!=null) { fontWeight = value; } else { fontWeight ="Normal"; } }
}


是的,你可以。

如果你在找类似的东西:

1
2
3
4
5
6
[DefaultValue("Normal")]
public String FontWeight
{
    get;
    set;
}

谷歌搜索"使用.net进行面向方面的编程"

…如果这对你来说是多余的,那么就这样做:

1
2
3
4
5
6
7
8
private string fontWeight;
public String FontWeight {
    get
    {
        return fontWeight ??"Normal";
    }
    set {fontWeight = value;}
}


不,自动属性只是一个普通的getter和/或setter以及一个支持变量。如果要在属性中放入任何类型的逻辑,则必须使用常规属性语法。

您可以使用??运算符使其略短,不过:

1
2
3
4
5
6
private string _fontWeight;

public String FontWeight {
  get { return _fontWeight; }
  set { _fontWeight = value ??"Normal"; }
}

请注意,setter不用于初始化属性,因此如果不在构造函数中设置值(或在变量声明中指定值),则默认值仍然为空。您可以在getter中进行签入以绕过此问题:

1
2
3
4
5
6
private string _fontWeight;

public String FontWeight {
  get { return _fontWeight ??"Normal"; }
  set { _fontWeight = value; }
}


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

1
2
3
4
5
6
private String fontWeight ="Normal";
public String FontWeight
{
    get { return fontWeight; }
    set { fontWeight = value; }
}

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

1
2
3
4
5
6
public constructor()
{
    FontWeight ="Normal";
}

public String FontWeight { get; set; }

您需要使用支持字段。

1
2
3
4
5
6
private string fontWeight;
public String FontWeight
{
    get { String.IsNullOrEmpty(fontWeight) ?"Normal" : fontWeight;}
    set {fontWeight = String.IsNullOrEmpty(value) ?"Normal" : value;}
}

可以使用默认值属性:

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

尽管它指出

A DefaultValueAttribute will not cause a member to be automatically initialized with the attribute's value. You must set the initial value in your code.

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


一种方法是使用postsharp,在这个答案中详细描述了一个类似的问题。


您需要这样一个变量:

1
2
3
4
5
6
7
8
9
10
11
12
13
string fontWeight;

public string FontWeight
{
    get
    {
        if (string.IsNullOrEmpty(fontWeight))
            fontWeight ="Normal";

        return fontWeight;
    }
    set { fontWeight = value; }
}

或者使用Constructer设置初始值:

1
2
3
4
5
6
7
8
9
class FontClass
{
    public string FontWeight { get; set; }

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