将“私人”字段声明为私有字段还是内部字段更好?

时间:2011-04-14 15:47:03

标签: c# keyword

将属性声明为私有属性还是内部属性更好?并且......为什么一个人优先于另一个?

我工作的人一直声称“私人”字段是内部的,我认为没有任何意义......所以我必须遗漏一些东西。

示例:

/// Someone I work with does this
public class SomeClass
{
    internal Document _document;
    internal Contractor _contractor;
    internal IUser _user;
    internal Project _project;
}

/// I usually do this
public class SomeClass
{
    private Document _document;
    private Contractor _contractor;
    private IUser _user;
    private Project _project;
}

3 个答案:

答案 0 :(得分:11)

应该使用最严格的访问修饰符声明字段和任何其他成员,以允许根据需要使用该成员。

  • internal只允许在同一个程序集或朋友程序集中使用它
  • private只允许在类型本身中使用

无论哪种方案满足您的方案都是应该选择的方案。

我猜这里private更合适。鉴于字段名称不符合.Net设计指南,它似乎是该类型的私有。因此,我会将其设为私有或给它一个合适的名称。

答案 1 :(得分:4)

通常纯粹私有自动实现的属性也可能是私有字段。

作为一个简单的经验法则,尽可能多地限制一切,而不会造成太多痛苦。如果程序集中没有其他内容使用这些属性(或 应合理地使用这些属性),那么将它们设为私有(并可能使它们成为普通字段)是一种很好的方法。

编辑:好的,既然我们正在讨论字段,那么肯定会将它们设为私有。非私有字段应该令人难以置信地罕见 - 几乎我能想到的唯一用途是常量(实际上是const还是只是不可变类型的只读静态字段)。即便如此,我通常会使用属性。只是偶尔对于游戏和其他性能危急的情况,值得违反规则 - 但你需要首先理解并尊重这些规则。

字段是实现详细信息 - 确切地说,如何在对象中存储数据对于尝试使用该对象的其他代码不应该感兴趣。关注类型应支持的API与该API的实现之间的差异。

答案 2 :(得分:2)

这取决于我的要求。如果您需要其他类来访问同一程序集中的变量,那么内部就是可行的方法。如果您不需要其他类来访问,则将它们声明为私有。

更多关于内部的信息可以在这里找到:

Practical uses for the "internal" keyword in C#