为什么要在 C # 中写“ private”关键字?

据我所知,private是 C # 中默认的 无处不在(这意味着如果我不编写 publicprotectedinternal等等,它将默认为 private)。(如果我说错了,请纠正我。)

那么,写这个关键字的原因是什么,或者它为什么会存在于成员中呢?

例如,当一个事件处理程序是自动生成的时候,它看起来像这样:

private void RatTrap_MouseEnter(object sender, CheeseEventArgs e)
{


}

但是,如果这是隐含的和默认的,它为什么还要写作 private 呢?只是为了让新手开发人员(谁不知道它是 C # 默认的)知道它是私有的?还是编译器有区别?

此外,是否存在写入“ private”(单独) will改变成员的可访问性的情况?

20222 次浏览

我认为这与本课程其他内容的可读性是一致的。

AFAIK,private 是 C # 中所有地方的默认值(也就是说,如果我不写 public、 protected、 Internal 等,它默认就是 private)。(如有错误请纠正)。

这不是真的。在命名空间(类、结构、接口等)中定义的类型默认为 内部。此外,不同类型的成员具有不同的默认可访问性(如接口成员的 public)。有关详细信息,请参阅 MSDN 上的 无障碍级别

还有,

那么,写这个关键词的原因是什么,或者它为什么存在?

显式地指定此类型有助于表明将类型设置为私有的意图,非常显式地指定此类型。随着时间的推移,这有助于提高代码的可维护性。这有助于其他开发人员(或您自己)了解某个成员是默认私有的还是故意私有的,等等。

可读性,意图的展示是我能想到的两个重要原因。

AFAIK,private 是 C # 中所有地方的默认值

不完全是——默认值是“此声明可用的最受限制的访问”。例如,对于顶级类型,默认值是 internal; 对于嵌套类型,默认值是 private

So, what's the reason to write that keyword, or why does it even exist?

这样做很明确,有两个好处:

  • 对于那些不知道默认值的人来说,这样就更清楚了,就像你的问题一样(我个人从来不喜欢这个论点,但我觉得值得一提)
  • It gives an impression that you've deliberately decided to make it private, rather than just gone with the defaults.

至于你的最后一部分:

此外,是否存在写入“私有”(单独)将改变成员的可访问性的情况?

是的,因为它让一半的财产比另一半更具限制性:

// Public getter, public setter
public int Foo { get; set; }


// Public getter, private setter
public int Bar { get; private set; }

用过去默认的任何地方,我可以,但我已经说服(部分由埃里克利珀特) ,明确表示,你已经考虑过它和 决定了使一些私有的是一个好主意。

Personally I wish there were a way of doing that for sealed / unsealed, too, for type declarations - possibly not even a default. I suspect that many developers (myself included if I'm not careful) leave classes unsealed just because it's less effort than making them sealed.

可读性——不是每个人都知道私密性是默认行为。

Intent - Gives a clear indication that you have specifically declared the property private (for whatever reason).

One good reason for explicitly specifying the visibility is so that you don't have to think about what is the default for the context you are in.

另一个好的理由是 FxCop告诉你这样做。

据我所知,private 在 C # 中的所有地方都是默认的

显式声明 private,意味着 知道是私有的。不仅仅是认为它是,因为就你所知,它是默认的。这也意味着其他查看代码的人知道它是什么。

没有“我认为是”、“我非常肯定是”等等。就是这样.每个人都在同一页上。

我不是 C # 开发商。如果我必须处理一些没有显式声明为 二等兵的代码,我可能会假设它是 内部

I dislike when things are implicitly set. It's never as clear as when they are explicitly set.

A lot of people (people like me!) regularly program in a handful of different languages. Being explicit with things like these prevents me from needing to remember all the arcane details of all the languages I program in.

private增加了视觉混乱。对于那些坚持认为它使事情明确化的人,我想问: 你们在数学方面也是这样做的吗?例如:

var answer = a + b / c;

你发现 b / c周围没有多余的括号不清楚吗?

C # 中的规则非常简单: By default, everything is as close to private as it can be.所以如果你需要一个比默认值 更多可见的东西,添加一个修饰符。否则,不要向代码中添加不必要的关键字。

我喜欢明确地添加 private关键字,以便我 知道它是私有的。另外,private并不总是所有地方的默认访问说明符。此外,还可以在属性中使用 private set来有效地创建只读属性,该属性只能由声明它的类设置。