我知道这个问题已经被问到了一些,从表面上看,这个问题没有明确的是或否答案,但我仍然对某些事情感到有些困惑。

通常在我编程时,我遵循一些关于前缀的规则:

  • m_在成员面前
  • p_ 在属性
  • 前面
  • s_在静态
  • 前面
  • a_ 前面的参数
  • l_ 在局部变量
  • 前面

    我现在得到了一份新工作,我注意到代码中没有使用前缀。我问为什么,他们回答说 IDE 负责跟踪什么是成员变量和什么是局部变量。现在我在想,可能是这样,但无论如何使用前缀不是更容易吗?

    我的意思是,例如,如果我有一个成员、一个静态变量和一个名为“robot”的局部变量,那么在编写方法时引用它会不会很麻烦?这可能是一个不切实际的例子,但我喜欢在我的脑海中有一个很好的规则集,即使在不切实际的情况下,我也可以始终如一地应用它。

    这个例子证明使用匈牙利符号是合理的吗?

    我想我会列出一个优点/缺点列表,并在我了解更多时对其进行编辑。

    反对匈牙利语的论据:
    Class.RobotRobotthis.robotrobot
    不需要匈牙利语。

    计数器:

    仍然存在不一致之处,机器人在不同的方法中可能意味着不同的东西。为了保持一致,您应该在每个 Robot 变量之前添加 Class 或 this (或什么都没有)前缀。

    最重要的是,假设你想访问静态变量 Strawberry,你怎么知道一个名为 Strawberry 的成员变量没有定义?也许它定义在另一个你看不到的文件中,所以你可能会得到意想不到的结果。现在您可能会说这是通过 IDE 可见的,但我认为使用前缀更好,因为您可以看到所引用的内容,而您可能会错过 IDE 告诉您的内容。当然,您也可以使用 this/Classname 前缀,但这会破坏不使用匈牙利符号的目的。

    反对匈牙利语的论据:

    当在字段和变量的命名中使用匈牙利符号时,就会违反此规则。匈牙利表示法在 C++ 代码中的使用已经很普遍,但 C# 中的趋势是为变量使用更长、更具描述性的名称,这些名称不是基于变量的类型,而是描述变量的用途。

    计数器:

    我提到的前缀不是基于变量的类型,前缀确实指定了变量的用途。

    反对匈牙利语的论据:

    现代代码编辑器(例如 Visual Studio)可以轻松识别变量或字段的类型信息,通常是将鼠标光标悬停在变量名称上。这减少了对匈牙利符号的需要。

    计数器:

    虽然这是真的,但我自己几乎从不将鼠标悬停在变量名称上方,除非发生错误。相比之下,使用匈牙利表示法,您可以立即看到您的变量在类中的位置。

    备注:

    Microsoft 不建议对文件名使用匈牙利表示法吗?我读到用 I 前缀接口(interface)文件是一种约定,这是匈牙利符号的一种形式。虽然这与我上面的问题没有直接关系,但它确实提出了有时建议使用匈牙利表示法的观点。

    最佳答案

    不,不要这样做。它使代码更难阅读。如果你写英语时,每个动词前面都带有 v_,而每个名词都带有 n_,这会使句子更难阅读,同时添加大多数时候没有用的信息。

    如果你的类设计得很好,很少有责任和简短的方法,那么从名称和使用它的上下文中找出每个变量的含义应该不会太难。当它不明显而您需要知道时,很容易找到:您只需将鼠标悬停在变量名称上,或按“转到定义”即可。

    StyleCop 有一个 rule ,当你使用匈牙利符号时会发出警告。规则描述对规则存在的原因有一些解释:

  • TypeName FieldNamesMustNotUseHungarianNotation
  • CheckId SA1305
  • 类别命名规则

  • 原因

    C# 中字段或变量的名称使用匈牙利表示法。

    规则说明

    当在字段和变量的命名中使用匈牙利符号时,就会违反此规则。匈牙利表示法在 C++ 代码中的使用已经很普遍,但 C# 中的趋势是为变量使用更长、更具描述性的名称,这些名称不是基于变量的类型,而是描述变量的用途。

    此外,现代代码编辑器(例如 Visual Studio)可以轻松识别变量或字段的类型信息,通常是通过将鼠标光标悬停在变量名称上。这减少了对匈牙利符号的需要。

    关于c# - 我应该在 C# 中使用匈牙利应用程序符号吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8334548/

    10-11 04:07