我想知道什么是C#最佳实践,公共getter的私有/受保护成员,还是私有/受保护的setter的公共getter?
public int PublicGetPrivateSetter
{
get;
private set;
} private int _privateMember;
public int PublicGetPrivateMember
{
get { return _privateMember; }
}我觉得使用私有成员在您的代码中更明确,它是一个私有设置者(使用命名约定)。另一方面,使用私有设置器可以让您选择使用虚拟的(受保护的),编写更少的代码,减少出错的空间,如果需要的话,还可以给您提供一个添加副作用的选项。
我找不到什么被认为是最佳实践,即使其中一个被认为比另一个更好。据我所见,通常有80%的时间(从我所见过的代码中)人们不使用私有的setter.我不确定这是因为人们不知道私人设置者,还是因为实际使用私有成员被认为更好。
编辑:
事实上,我在使用私有成员时忘记了的其他好处是默认值和只读的使用。
发布于 2011-03-01 21:28:23
我更喜欢使用自动实现的属性,除非默认的实现没有做我想做的事情。因此,在这种情况下,由于自动实现的属性可以满足您的需要,所以只需使用:
public int Foo { get; private set; }但是,另一种情况是,如果您想要使字段readonly (这意味着可以在构造函数中设置字段的唯一位置)。然后,您需要定义支持字段并将其标记为只读,因为自动实现的属性不支持该字段:
private readonly int foo;
public int Foo
{
get { return foo; }
}发布于 2011-03-01 21:28:59
我不知道有什么最佳做法。我知道自动属性主要是为了使代码生成和LINQ相关的事情变得更容易。
对我来说,如果需要的话,我将从自动属性和重构开始。根据需要,我可能会像您提到的那样将某些内容更改为虚拟的或受保护的,或者可能将重构更改为使用变量(当我想重构set访问器以具有某种逻辑时)。
发布于 2011-03-01 21:29:05
也是一样的。在第一个示例中,编译器生成支持存储。在第二个过程中,您生成了备份存储。由于实现是类的内部实现,因此将其中一个重构为另一个并不是什么大事。像Resharper这样的工具使这件事变得微不足道。您可能还没有见过这么多私人设置的原因是因为它是C# 3.0特性。
https://stackoverflow.com/questions/5160546
复制相似问题