【问题标题】:Underscores for private local variables? [closed]私有局部变量的下划线? [关闭]
【发布时间】:2009-04-28 17:49:12
【问题描述】:

BCL 似乎就是将下划线用于私有局部变量。我从不使用它们,但像这样离开:

int count = 0;

this.Count++;

public int Count
...

public ClassName ( int count )
{
    this.Count = count;
}

您对此有何看法?它们是我的方法的问题吗?

【问题讨论】:

  • 你永远不会就实例变量命名约定达成共识。
  • 这个问题绝对是主观的,但我不确定是否有争论。 OP要求她的方法有问题。有一些潜在的问题,值得探索。我倾向于认为这个问题纯粹是为了争夺名誉,但它确实有它的优点。
  • 是的,我的方法的问题怎么可能是主观的。要么是真的,要么是假的。
  • 是的,但我说的是技术问题,而不是个人意见。像命名冲突等,这不会发生。

标签: c# .net


【解决方案1】:

这基本上是你必须自己决定的事情,只需找到或制作一个风格指南并遵循它。

就我个人而言,我使用 _ 作为类私有字段的前缀。

【讨论】:

    【解决方案2】:

    我们在这里使用的简单规则是:一个类的私有实现细节,包括变量名,完全取决于制作它的开发人员。公共/受保护的方法名称、属性、类名称等均受最佳实践指南的约束。内部类型甚至可以被认为是其中的一部分,因为它们不是公开可见的。

    当其他人需要使用你的库时,它永远不必使用内部或私有类型,不会看到你是否使用下划线等。换句话说,这真的取决于你....

    请记住,如果其他人必须稍后维护您的代码,那么它不应该过于混淆......

    【讨论】:

      【解决方案3】:

      不需要使用下划线来表示私有变量。这都是个人喜好。我只使用它们,所以我知道我使用的是局部变量,而不是让 Intellisense 不小心使用了我的公共属性。

      【讨论】:

        【解决方案4】:

        IMO,就此而言,您永远不应将私有成员变量命名为与属性、方法或其他任何名称相同的名称。应该清楚您正在使用哪个命名项目。这将使您的代码更易于理解和维护,并会减少您自己或其他需要维护您的代码的开发人员的编程错误。

        此外,如果您想将代码移植到 VB,那么该特定命名将不起作用。不知道为什么要切换到 VB,但它确实发生了。

        【讨论】:

        • 除了VB端口,你为什么认为它会不清楚?如果是小案例,那么它是私人的吗?你在想别的吗?
        • 我见过非常大的类,带有(多个)屏幕,其中充满了实例变量,因为您无法确定变量的范围,因此很难维护。然而,这是一个症状,您应该重构为更小的类。在具有合理数量的私有状态变量的小类中,不带前缀的实例变量非常易于维护和理解。
        • 谢谢迈克尔,你能举个例子吗?我不知道如何使用我的方法仅通过查看名称就无法知道任何变量的范围?
        • 我的例子只能是轶事,因为我说的是太大而无法理解的类。实例变量并不是这些类中唯一受到影响的东西。想象一个 30,000 行的类。在这些情况下,可以通过使用智能感知在您键入“this._”时为您提供建议来帮助了解在这些情况下实例范围内可用的变量,因为查找变量意味着滚动文件顶部的声明页面。不过,就像我说的那样,如果您的代码库中有“上帝类”,那么这可能是您遇到的最少问题。
        • 我明白了。是的,我不会有 30k 行课程。
        【解决方案5】:

        我使用下划线。它帮助我控制变量范围并减少命名冲突的可能性。

        【讨论】:

          【解决方案6】:

          下划线对于不区分大小写的语言(如 VB.Net)更有意义。在 C# 等语言中,这完全取决于个人喜好。

          如果您不喜欢将this. 放在一些模棱两可的作业前面,那么下划线适合您。没有它们,你偶尔会不小心做这样的事情:

          private int that;
          
          public void AssignThat(int that)
          {
              that = that;  // assigns to method scope variable, not instance scope
          }
          

          FXCop 或 R# 应该会为您捕捉到这一点,我相信您会收到编译器警告,但这是可能的。

          【讨论】:

          • 是的,如果将变量分配给自身,则会收到编译器警告。
          • @Albic,谢谢。 R# 总是为我解决这些问题,所以我从来没有进入编译部分。
          【解决方案7】:

          使用前缀 IntelliSense 是有实际原因的。 ATM 的脑损伤在于它不能真正区分当前实例变量和继承的属性/变量。因此,对私有变量使用“_”可以更轻松地在 VS 代码编辑器中的智能感知列表和函数/变量列表中定位变量。所以在某种程度上它是更广泛的匈牙利符号。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-01-19
            • 2011-08-23
            • 2020-06-27
            • 2012-09-25
            • 2023-03-19
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多