考虑到“私”是类成员的默认访问修饰符,为什么关键字甚至需要?
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:
实际上,如果类或结构是不是有访问修饰符默认为内部声明。
所以,如果你想要把它变成私有,使用私有。