Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果私有变量已经是私有变量,那么我应该将它们标记为私有变量有什么用?_C#_.net_Default_Declaration - Fatal编程技术网

C# 如果私有变量已经是私有变量,那么我应该将它们标记为私有变量有什么用?

C# 如果私有变量已经是私有变量,那么我应该将它们标记为私有变量有什么用?,c#,.net,default,declaration,C#,.net,Default,Declaration,据我所知,在C#中,所有字段默认都是私有的,如果没有另外标记的话 class Foo { private string bar; } class Foo { string bar; } 我想这两个声明是相等的 所以我的问题是:如果私有变量已经是私有的,那么我应该将它们标记为私有变量做什么呢。在你的情况下,做最有利于可读性或有意义的事情。不过,我把它们标记为私人的,只是想说明一下 这纯粹是一个编码标准问题,但无论如何,我总是明确地将私有成员标记为私有。是的,它们是相等的,但我喜欢将私有

据我所知,在C#中,所有字段默认都是私有的,如果没有另外标记的话

class Foo
{
  private string bar;
}

class Foo
{
  string bar;
}
我想这两个声明是相等的


所以我的问题是:如果私有变量已经是私有的,那么我应该将它们标记为私有变量做什么呢。在你的情况下,做最有利于可读性或有意义的事情。不过,我把它们标记为私人的,只是想说明一下

这纯粹是一个编码标准问题,但无论如何,我总是明确地将私有成员标记为私有。

是的,它们是相等的,但我喜欢将私有变量标记为私有,我认为这提高了阅读能力

此外,我对私人成员使用这种通用符号,它非常有用:

private string _bar;

现在;不管怎样,字段应该总是私有的,所以您是否应该麻烦,这是一个边缘案例

对于更广泛的主题,我记得Eric Lippert的一条评论——本质上说,给定一个方法/类/任何东西:

void Foo() {}
class Bar {}

然后就不清楚它们是否是私有的/内部的,或者开发人员是否已经考虑过了,并决定它们应该是私有的/内部的/随便什么。因此,他的建议是:告诉读者你是故意而不是偶然做的事情——把它说清楚。

我认为为了可读性,最好是说清楚


另一方面,您可能希望了解一个名为代码样式强制器()的visual studio插件,它使用dxCore扩展来提供代码遵守编码标准的实时反馈(完全可定制)。

关于这一点,我已经犹豫了一段时间。我曾经主张让它含蓄,但现在我想我倾向于让它明确

将其隐藏的原因:

  • 这意味着非私有成员(或比默认成员有更多访问权限的任何成员)之间的差异更大;这将在读取代码时突出显示差异
明确的理由:

  • 一些开发人员可能不知道默认设置:明确表示每个人都清楚
  • 这表明你已经积极地做出了决定,而不仅仅是把它留给默认的决定

后面几点是我们不久前讨论过的。

我个人更喜欢显式标记默认的private和default public字段。您可能很清楚默认设置,但只要快速扫描代码,您的大脑就会喜欢冗长。

如果您定期在Java和C之间切换,我想明确指定访问修饰符是相当重要的。例如在Java中

void myMethod()
{

}

包中的任何类都可以访问该方法。在C#中,它显然是类和内部类的私有属性。

不要让人们猜测,不要让他们做出错误的假设,也不要认为更少的字符在任何方面都等同于清晰


没有充分的理由不明确这一点,而且我认为C#支持这一点是错误的(特别是如果他们出于同样的原因愿意做切换语句的事情)

明确使用private可以提高某些边缘情况下的可读性

例如:

        /*
        Tomorrow when we wake up from bed,
        first me and Daddy and Mommy, you, eat
        breakfast eat breakfast like we usually do,
        and then we're going to play and
        then soon as Daddy comes, Carl's going
        to come over, and then we're going to
        play a little while. And then Carl and
        Emily are both going down to the car
        with somebody, and we're going to ride
        to nursery school [whispered], and then
        when we get there, we're all going
        to get out of the car...
        */

        int spam;

        /*
        Does this style look at all familiar?
        It should!
        */
查看这个片段,您可能不确定是在方法范围内还是在类范围内


在字段名中使用
private
或下划线(
private int spam;
int spam;
int spam;
)将消除混淆。

很抱歉,我不喜欢下划线符号。我不认为应该进行下一票(固定)-命名约定是一个分裂性的问题,“基于它的否决票是不合理的。”雅库布——坦白说,那又怎样?这与实际问题无关,事实上,许多人确实觉得前缀很有用。碰巧的是,我更喜欢不带下划线,但对它投反对票只是一个小问题。私有/成员变量的下划线是一种非常常见的命名约定,我在过去6年中一直使用这种约定,所以我将给出另一个1。Jon挖出了有疑问的评论:开发者不应该“故意决定”某个东西是否私有。它应该是自动私有的,因此是默认的。只有公众和受保护的成员才需要有意识的决定才能这样做。@Constantin-如果你经历了这个思考过程,并认定
私人
事实上是正确的,那该怎么办呢。告诉读者!对于阶级,还有另一个很好的理由(部分阶级模糊)。@Constantin-强烈反对。默认设置对于可读性来说是非常糟糕的。如果void成为了一个方法的默认输出,您是否愿意让它成为隐式的?如果它是字符串[]?@annakata-真的;另一个问题:类的默认可访问性是什么?许多人说“内部”,但这是不正确的;对于顶层,它是“内部的”,对于嵌套的,它是“私有的”。另一种情况是,明确表达会带来好处。当我能快速编码时,我的大脑当然更喜欢简洁,而不是冗长。我不认为记住默认值是个问题,因为它是我能想象到的最符合逻辑的默认值。对于类,“private”是默认值,对于结构,“public”是默认值。如果你使用不同的语言,情况会变得更糟。我更愿意帮助自己。@所以测试员,这是一个C问题,而不是C++。Private仍然是C#structs的默认值。不应该。语法是隐含的,我看不出你为什么要写它,因为它是多余的。我更喜欢简短的语法,我不会因为可以这样做就把字符浪费在毫无意义的糖上。这完全取决于你来决定你想做什么,这一点都没有区别。另请看:。对我来说,使“private”显式的第二个理由有点像“我在写'I=+42'而不是'I=42',以向维护程序员表明我知道负数!我在这里积极地做决定!”:)@Constantin:正如你在别处所说,类比证明不是证明。我想要