请帮助解决这个问题.我有一个公共类,有一些属性.属性集是私有的,get是公共的.设置属性的唯一方法是调用构造函数.这种设计有什么好处或缺点?我应该知道有什么影响吗?我的论点是,如果私人套装没有任何好处,为什么呢?counter参数是在实例化类之后不需要更改属性,如果需要修改类以允许它.
这只是哲学还是背后有实际的技术推理?
public string Id
{
get;
private set;
}
Run Code Online (Sandbox Code Playgroud)
更新:只是为了澄清这个问题.我不是在问私人套装是什么以及在哪里使用它.我问您是否不知道您的属性是否需要在构造函数之外进行更改,或者您是否从限制集合中获益.所以我想问题是,如果你不知道你走哪条路,答案是否尽可能限制它?
如果私人套装没有任何好处,为什么呢?
这是看错的方法.
公共二传手是一个特色.它必须经过设计,记录,测试和维护,或者您必须决定是否可以发送未经过签名,未记录,未经测试和未维护的功能.我的管理层不会那么好,但也许你的是.你必须决定如果有人将它设置为null会发生什么,如果有人从另一个线程设置它会发生什么,等等.
由于公共制定者是有成本的东西,所以论证应该是"如果对公共制定者没有任何好处,那么我们必须将其私有化,以避免增加一个没有任何好处的特征的成本."
公共制定者的成本高于显而易见的成本.公共设定者意味着您无法根据过去的值对当前属性的值进行任何逻辑推断.你必须假设任何人都可以随时改变这一点.您正在减少有关您的计划的已知事实的数量,从而增加您对该计划的某些部分理解错误的可能性.可变性使程序更难以推理.
counter参数是在实例化类之后不需要更改属性.如果需要,修改类以允许它.
对.如果该功能为您购买没有任何好处,那么不要支付其费用!如果需要,则做出关于成本是否值得的商业决策.