当我可以使用房产时,为什么要使用Field?

时间:2012-11-27 19:21:09

标签: c# properties get set field

  

可能重复:
  Difference between Property and Field in C# .NET 3.5+
  Why should I use an automatically implemented property instead of a field?

以下两个示例完全相同,在类内外都有相同的访问写入...那么为什么每个人似乎都使用示例1作为示例2? 我确定我只是遗漏了一些东西,但这一直困扰着我一段时间而且我找不到明确的答案。

class SampleClass
{
    /// Example 1
    /// Shown by online examples. 
    /// Why use a Field AND a Property where you could just use Example 2?
    private int age;
    public int Age { get { return age; } }
    private void setAge()
    {
        age = 1;
    }

    /// Example 2
    /// Tidier code and better understanding of how Age2 can be accessed. 
    /// Personally I prefer this method, though am I right to use it over Example 1?
    public int Age2 { get; private set; }
    private void setAge2()
    {
        Age2 = 1;
    }
}

3 个答案:

答案 0 :(得分:1)

如果要在属性设置器或getter上提供任何实际功能,则必须使用支持字段。例如,如果要对setter进行验证,则需要使用支持字段。

public class MyClass
{
    private string myString = "blah";

    public string MyNotNullString
    {
        get
        {
            return this.myString;
        }
        set
        {
            if (value == null)
            {
                throw new ArgumentNullException("Cannot set MyNotNullString to null");
            }
            this.myString = value;
        }
    }
}

答案 1 :(得分:0)

如果可能的话,我会尽可能使用Example2来处理整洁因素...除非我需要一个字段,就像@Platinum Azure回答一样。

我能想到的Example1唯一的另一个好处是你可以在getter或setter方法中设置一个断点,作为一种快速找出更改值的方法。

答案 2 :(得分:0)

如果我使用VS2008或更高版本并且不需要在VS2005中编译,通常我会使用速记或:

public string SomeProperty { get; set; }

但有时您需要一个支持字段,尤其是当您实现INotifyPropertyChanged时。

private string _someProperty;
public string SomeProperty
{
    get { return _someProperty; }
    set
    {
        _someProperty = value;
        OnPropertyChanged("SomeProperty");
    }
}

但即使我有一个支持字段,我仍然通过属性设置值,以保持一致性。