4

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

class Foo
{
  private string bar;
}

class Foo
{
  string bar;
}

我猜这两个声明是相等的。

所以我的问题是:我应该将私有变量标记为什么,就private好像它们已经是私有的一样?

4

10 回答 10

28

现在; 无论如何,字段几乎总是应该是私有的,所以你是否应该打扰是一个边缘情况。

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

void Foo() {}
class Bar {}

然后不清楚它们是否是故意的私有/内部,或者开发人员是否考虑过,并决定它们应该是私有/内部/什么的。所以他的建议是:告诉读者你是故意而不是偶然做事——让它明确。

于 2009-02-16T10:32:10.677 回答
15

关于这件事,我已经有一段时间了。我曾经主张让它隐含,但现在我认为我倾向于让它变得明确。

隐含的原因:

  • 这意味着非私人成员(或任何比默认访问权限更多的成员)有更大的差异;这突出了阅读代码时的区别

明确说明的原因:

  • 一些开发人员可能不知道默认值:明确表示每个人都清楚
  • 它表明您已经主动做出了决定,而不是仅仅将其保留为默认值

后面这几点基本上是 Eric Lippert在我们前段时间讨论时提出的。

于 2009-02-16T10:33:21.080 回答
8

是的,它们是平等的,但我喜欢将私有变量标记为私有,我认为它可以提高阅读能力。

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

private string _bar;
于 2009-02-16T10:29:31.417 回答
4

这纯粹是一个编码标准问题,但是,为了它的价值,我总是明确地将私有成员标记为私有。

于 2009-02-16T10:29:12.057 回答
4

如果您定期在 Java 和 C# 之间切换,我想明确指定访问修饰符将非常重要。例如在 Java 中

void myMethod()
{

}

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

于 2009-02-16T10:48:04.197 回答
3

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

没有充分的理由明确说明这一点,恕我直言,C# 支持它是一个错误(特别是如果他们愿意做他们所做的事情来切换语句)

于 2009-02-16T10:52:57.507 回答
2

在某些极端情况下,显式使用 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;

于 2009-02-16T11:57:36.540 回答
1

由你决定。做最好的可读性或对您的情况有意义的事情。我将它们标记为私有只是为了说明清楚。

于 2009-02-16T10:28:52.807 回答
1

我认为为了可读性,最好是明确的。

作为一个方面,您可能希望查看一个名为Code Style Enforcer ( http://joel.fjorden.se/static.php?page=CodeStyleEnforcer ) 的 Visual Studio 插件,它使用 dxCore 扩展来提供真实-您的代码遵守编码标准的时间反馈(完全可定制)。

于 2009-02-16T10:32:28.663 回答
0

我个人更喜欢明确标记默认的私有和默认公共字段。您可能很了解默认设置,但只要您快速扫描代码,您的大脑就会喜欢冗长。

于 2009-02-16T10:37:25.127 回答