私有财产和私人领域之间的差异

时间:2014-08-29 11:29:11

标签: c# class properties field

假设您有班级考试:

public class test
{
    public test()
    {
        isTesting = false;
    }

    private bool isTesting;

    public bool getTesting() { return isTesting; }
    private void setTesting(bool testing) { isTesting = testing; }
}

另一个:

public class test
{
    public test()
    {
        isTesting = false;
    }

    public bool isTesting { private set; get; }
}

这两者有什么区别吗?

是否应该使用另一个或者这是一个偏好的问题?

3 个答案:

答案 0 :(得分:0)

使用.NET,您应该使用属性。不鼓励使用Java中使用的GetX/SetX方法。当暴露类型的数据时,通常建议使用属性(它们定义公共接口) - 字段应该只是私有的。

答案 1 :(得分:0)

私有财产在.Net中具有优势,因为它们允许您抽象内部数据,以便在内部表示发生变化时,它们不会影响实现的其他部分。私人领域不提供此功能。

另一方面,私人财产在延迟加载时非常有利。

您也可以查看Are there any reasons to use private properties in C#?

答案 2 :(得分:0)

您提供的两个代码示例现在在功能上是等效的,但getter / setter方法的主要原因(无论是"属性"还是显式方法)都是他们的可以在不修改调用它们的代码的情况下更改实现。如果你这样做,那么这些就不一定了,因为第一个实际上没有调用setter而第二个没有。要匹配第二个,第一个构造函数应该写成如下:

public test()
{
    setTesting(false);
}

或者第二个应写入而不是调用setter,即设置字段而不是属性:

public test()
{
    _isTesting = false;
}

private bool _isTesting;

public bool isTesting {
    private set { _isTesting = value; }
    get { return _isTesting; }
}

除此之外,在大多数案例中没有实际区别:尽管属性实际上已经编译成getter和setter方法,但它们仍然保留了事实上的元数据#34 ;属性"与"方法"相反,某些API依赖于此信息。

另一个区别是语义:属性被视为它们是字段,意味着它们从内存中执行某种基本存储/检索。如果我在C#代码中看到一个名为GetX而不是属性X的方法,我可能会认为该方法正在做一些更高级的方法,并以不同的方式对待它。

相关问题