什么是“私人”的修改呢?(What does the “private” modifier do?)

2019-07-04 16:02发布

考虑到“私”是类成员的默认访问修饰符,为什么关键字甚至需要?

Answer 1:

这对你(和将来的维护),而不是编译器。



Answer 2:

有误传这里一定量的:

“默认访问修饰符是不是私人的,但内部的”

嗯,这取决于你在说什么。 对于一个类型的成员,它是私有的。 对于顶级类型本身,它的内部。

“私人,只提供一种方法的默认”

不,它是一个类型的所有成员的默认-属性,事件,字段,运算符,构造函数,方法,嵌套类型和别的我忘了。

“其实,如果类或结构是不是有访问修饰符则默认为内部宣布”

仅适用于顶级类型。 对于嵌套类型,它是私有的。

比限制的一个部分而不是其他属性访问等,默认是基本上总是“限制性一样可以。”

就个人而言,我对抖动是否要明确的问题。 “亲”使用默认的是,它突出了任何地方,你正在做的东西比最严格的水平更为明显。 “亲”为明确指定它是,它是那些谁也不知道上面的规则更加明显,它表明你想过这一点。

埃里克利珀去与明确的形式,我开始瘦这样了。

见http://csharpindepth.com/ViewNote.aspx?NoteID=54更多一点点这个。



Answer 3:

明晰。 我从来没有使用默认设置,始终明确添加改性剂。

这可能是因为我的Java背景这里默认是“包”(大致相当于“内部”在C#)等方面差异一直困扰着我。 我发现显性可取。

我现在也使用ReSharper的,默认为是明确的,所以只确认并强化了我的偏见:)



Answer 4:

私人修饰符解释意图。

私有成员变量不打算在类外直接操作。 GET /可能会或可能不会为变量创建设置访问器。

私有方法不打算在类外使用。 这可能是只在内部功能。 或者,你可以做一个默认的构造私人防止类的建设,而不传递值。

private修饰符(和其他类似的)可以写自我记录代码的有效途径。



Answer 5:

正如在他的书中C#在深度指出的乔恩斯基特,有在C#中一个地方需要私人关键字来实现的效果。

如果我没记错的正确,private关键字是创建一个私有财产范围的getter或setter,当它的对面有比私有可访问更大的唯一途径。 例:

public bool CanAccessTheMissileCodes
{
    get { return canAccessTheMissileCodes; }
    private set { canAccessTheMissileCodes = value; }
}

私人关键字是必需的 ,以实现这一目标,因为一个附加属性访问性修饰符只能缩小范围,而不是扩大它。 (否则,人们可能已经能够创建一个私有的(默认)属性,然后将一个公共的修饰符。)



Answer 6:

私人,只提供一种方法的默认,但私人修饰符别处使用。

从C#语言规范3.0(MSDN)第3.5.1节

根据其中一个成员声明发生的背景下,只有某些类型的声明可访问性是允许的。 此外,当成员声明不包含任何访问修饰符,该声明发生的上下文决定默认声明可访问性。

  • 命名空间隐含有公共声明可访问性。 没有访问修饰符允许在命名空间声明。
  • 在编译单元或命名空间中声明的类型可以具有public或internal声明可访问和默认内部声明可访问性。
  • 类成员可以有任何五种声明可访问和默认的是私有声明可访问性。 (请注意,声明为类成员的类型可以有任何五种声明可访问性的,而类型声明为一个命名空间的成员只能有公共或内部声明可访问性。)
  • 结构成员可以是公共,内部或私有声明可访问和默认的是私有声明可访问性,因为结构是隐式密封。 在结构中引入结构成员(也就是说,不是由该结构继承)已经不能保护或保护的内部声明可访问性。 (请注意,声明为结构成员的类型可以是公共,内部或私有声明可访问性,而类型声明为一个命名空间的成员只能有公共或内部声明可访问性。)
  • 接口成员隐含有公共声明可访问性。 没有访问修饰符允许在接口成员声明。
  • 枚举成员隐含有公共声明可访问性。 没有访问修饰符允许在枚举成员声明。


Answer 7:

对于completenes。 而有些人更喜欢,在他们关于他们的方法的访问修饰符代码明确。



Answer 8:

为了对称,并与喜欢的一切是明确的(我个人喜欢它... ...)的编码风格,以符合



Answer 9:

使用专用信号明确你的意图,并留下了线索人谁都会支持你的代码;)



Answer 10:

一些编码风格建议您把所有的“公共”项目第一,其次是“私有”的项目。 如果没有一个“私人”的关键字,你不能这样做的周围。

更新:我没有注意到这个,所以我的答案适用比C#更多C ++的“C#”标签。



Answer 11:

我通常会离开私人了,但我找到排队代码有用:

private   int    x;
public    string y;
protected float  z;

VS:

int x;

public    string y;
protected float  z;


Answer 12:

正如罗伯特·保尔森在他的回答表示, private改性剂不仅用于会员,而且对类型 。 这将成为重要,因为类型的默认是internal ,如果你使用它可以无意中泄漏InternalsVisibleToAttribute 。



Answer 13:

实际上,如果类或结构是不是有访问修饰符默认为内部声明。

所以,如果你想要把它变成私有,使用私有。



文章来源: What does the “private” modifier do?