1

可能重复:
C# .NET 3.5+ 中属性和字段之间的区别
为什么我应该使用自动实现的属性而不是字段?

下面的两个示例完全相同,在类内部和外部具有相同的访问写入... 那么为什么每个人似乎都使用示例 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;
    }
}
4

3 回答 3

1

如果要在属性设置器或获取器上提供任何实际功能,则必须使用支持字段。例如,如果您想对您的 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;
        }
    }
}
于 2012-11-27T19:26:43.653 回答
0

如果可能的话,我每次都会使用 Example2 作为整洁因素......除非有我需要一个字段的情况,如@Platinum Azure 的答案。

对于 Example1,我能想到的唯一其他好处是您可以在 getter 或 setter 方法中设置断点,作为找出谁在更改值的快速方法。

于 2012-11-27T19:40:02.030 回答
0

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

public string SomeProperty { get; set; }

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

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

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

于 2012-11-27T19:52:31.833 回答