假设您有班级考试:
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; }
}
这两者有什么区别吗?
是否应该使用另一个或者这是一个偏好的问题?
答案 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
的方法,我可能会认为该方法正在做一些更高级的方法,并以不同的方式对待它。