C#受保护字段的大写约定


17

C#中受保护字段名称的大写约定是什么?

是_myVar(例如私有字段)还是MyVar(例如属性)?


3
您确定要完全拥有受保护的字段吗?没有公共字段的大多数原因也适用于受保护的字段,因此我认为最好使用受保护的属性。
svick

在测试用例中,通常具有保护字段是很方便的。.但是也许您是对的,可以将其更改为属性。但是,如果我确实想要一个受保护的字段,命名约定是什么?
路易·瑞斯

2
您确定_myVar是适用于私有字段的正确约定吗?(您以此为前提)不是在这里发动一场宗教战争,只是想说,如果您为私有领域选择了某种任意规则,则可以为受保护领域选择另一条规则。唯一的建议就是保持一致。
力克(Marek)2012年

Answers:


13

有一些由Microsoft编写的称为“开发类库的设计准则”

它说如下:

不要提供公共或受保护的实例字段。

公共字段和受保护字段的版本不正确,也不受代码访问安全性要求的保护。与其使用公共可见字段,不如使用私有字段并通过属性公开它们。

以及:

  • 不要在字段名称中使用Pascal大小写

  • 不要在字段名称中使用前缀。例如,请勿使用g_或s_区分静态字段和非静态字段。

至于_前缀,它的使用与this.约定一样频繁(到目前为止,我已经在CodePlex / GitHub中浏览过源代码)。例如,ReSharper促进_了命名检查。


您在选择不包含“不要在字段名称中使用前缀”时有些挑剔。从MSDN到Pascal大小写规则:)虽然默认情况下reshaper确实会提升_前缀,但是如果您引用MSDN约定恕我直言,则不应将它们与您自己的印象混在一起。
马雷克(Marek)2012年

2
“版本不正确”是什么意思?您是在说由于不建议使用保护字段,所以没有关于它的名称的准则吗?无论如何,Resharper似乎会建议MyVar
Louis Rhys 2012年

2
@Marek:我确实包括了我自己的偏好。我只是简单地说了Resharper的偏爱。我的目的不是要有选择性。答案更新
jgauffin

1
@jgauffin除了消费者对代码使用反射之外,不是将字段更改为对调用者透明的属性吗?将受保护的字段更改为同名的受保护属性如何破坏兼容性?
量子

1
它破坏了二进制兼容性:msdn.microsoft.com/en-us/library/ta31s3bc
v=vs.71).aspx
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.