首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >私人集合还是私人成员?

私人集合还是私人成员?
EN

Stack Overflow用户
提问于 2011-03-01 21:26:09
回答 7查看 13K关注 0票数 23

我想知道什么是C#最佳实践,公共getter的私有/受保护成员,还是私有/受保护的setter的公共getter?

代码语言:javascript
复制
       public int PublicGetPrivateSetter
       {
            get;
            private set;
        }

代码语言:javascript
复制
        private int _privateMember;

        public int PublicGetPrivateMember
        {
            get { return _privateMember; }
        }

我觉得使用私有成员在您的代码中更明确,它是一个私有设置者(使用命名约定)。另一方面,使用私有设置器可以让您选择使用虚拟的(受保护的),编写更少的代码,减少出错的空间,如果需要的话,还可以给您提供一个添加副作用的选项。

我找不到什么被认为是最佳实践,即使其中一个被认为比另一个更好。据我所见,通常有80%的时间(从我所见过的代码中)人们不使用私有的setter.我不确定这是因为人们不知道私人设置者,还是因为实际使用私有成员被认为更好。

编辑:

事实上,我在使用私有成员时忘记了的其他好处是默认值和只读的使用。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-03-01 21:28:23

我更喜欢使用自动实现的属性,除非默认的实现没有做我想做的事情。因此,在这种情况下,由于自动实现的属性可以满足您的需要,所以只需使用:

代码语言:javascript
复制
public int Foo { get; private set; }

但是,另一种情况是,如果您想要使字段readonly (这意味着可以在构造函数中设置字段的唯一位置)。然后,您需要定义支持字段并将其标记为只读,因为自动实现的属性不支持该字段:

代码语言:javascript
复制
private readonly int foo;

public int Foo
{
    get { return foo; }
}
票数 34
EN

Stack Overflow用户

发布于 2011-03-01 21:28:59

我不知道有什么最佳做法。我知道自动属性主要是为了使代码生成和LINQ相关的事情变得更容易。

对我来说,如果需要的话,我将从自动属性和重构开始。根据需要,我可能会像您提到的那样将某些内容更改为虚拟的或受保护的,或者可能将重构更改为使用变量(当我想重构set访问器以具有某种逻辑时)。

票数 0
EN

Stack Overflow用户

发布于 2011-03-01 21:29:05

也是一样的。在第一个示例中,编译器生成支持存储。在第二个过程中,您生成了备份存储。由于实现是类的内部实现,因此将其中一个重构为另一个并不是什么大事。像Resharper这样的工具使这件事变得微不足道。您可能还没有见过这么多私人设置的原因是因为它是C# 3.0特性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5160546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档