我应该在C#中使用匈牙利应用程序符号吗?
我知道有人问过这个问题,从表面上看,这个问题没有一个明确的是或不是的答案,但我还是有点困惑 通常在编程时,我会遵循一些有关前缀的规则:我应该在C#中使用匈牙利应用程序符号吗?,c#,coding-style,hungarian-notation,C#,Coding Style,Hungarian Notation,我知道有人问过这个问题,从表面上看,这个问题没有一个明确的是或不是的答案,但我还是有点困惑 通常在编程时,我会遵循一些有关前缀的规则: 在会员面前 物业前面的p_uu 在静电传感器前面 参数前面的a_uu 局部变量前面的l_u 我现在找到了一份新工作,我注意到代码中没有使用前缀。我问了为什么,他们回答说IDE负责跟踪什么是成员变量,什么是局部变量。现在我在想,也许是这样,但是前缀的使用不是更容易吗 我的意思是,例如,如果我有一个成员、一个静态变量和一个名为“robot”的局部变量,那么在编写
- 在会员面前
- 物业前面的p_uu
- 在静电传感器前面
- 参数前面的a_uu
- 局部变量前面的l_u
Class.Robot
或Robot
this.robot
机器人
不需要匈牙利语
计数器:
仍然存在不一致性,机器人可以用不同的方法表示不同的事情。为了保持一致,您应该在每个Robot变量之前加上Class或this(或nothing)前缀
最重要的是,假设您想要访问静态变量草莓,您怎么知道名为草莓的成员变量没有定义?可能它是在另一个文件中定义的,您无法看到,因此您可能会得到意外的结果。现在您可能会说这是通过IDE可见的,但我认为使用前缀更优越,因为您可以看到所引用的内容,而您可能会错过IDE告诉您的内容。当然,您也可以使用这个/Classname前缀,但这样做会破坏不使用匈牙利符号的目的
反对匈牙利语的论点:
如果在字段和变量的命名中使用匈牙利符号,则会违反此规则。匈牙利符号的用法在C++代码中已经广泛使用,但是C语言的趋势是使用更长的、更描述性的变量名,这些变量不是基于变量的类型,而是描述变量使用的变量。
计数器:
我提到的前缀不是基于变量的类型,前缀确实指定了变量用于什么
反对匈牙利语的论点:
VisualStudio等现代代码编辑器可以轻松识别变量或字段的类型信息,通常是将鼠标光标悬停在变量名称上。这减少了对匈牙利符号的需要
计数器:
虽然这是事实,但我自己几乎从不将鼠标悬停在变量名上方,除非发生错误。相反,使用匈牙利符号,您可以立即看到变量在类中的位置
备注:
微软不建议文件名使用匈牙利符号吗?我读到用I作为接口文件的前缀是一种惯例,这是匈牙利符号的一种形式。虽然这与我上面的问题没有直接关系,但它确实提出了一点,即有时建议使用匈牙利符号。不,不要使用匈牙利符号。首先,现在是90年代。第二,你可能会被你的同事袭击…;-) 您的机器人示例:
Class.Robot
或Robot
this.robot
机器人
不需要匈牙利语。不,不要这样做。这使得代码更难阅读。如果你写英语时每个动词前面都有一个v_u,每个名词前面都有一个n_u,这会使句子更难读,同时会添加一些在大多数情况下都不有用的信息 如果你的类设计得很好,责任少,方法短,那么从名称和使用它的上下文中找出每个变量的含义应该不会太难。当它不明显并且您需要知道时,很容易找到:您可以将鼠标悬停在变量名上,或者按“转到定义” StyleCop有一个警告,当您使用匈牙利符号时会发出警告。规则说明对该规则存在的原因有一些解释:
- TypeName字段名称不得用于注释
- CheckId SA1305
- 类别命名规则
此外,VisualStudio等现代代码编辑器使识别变量或字段的类型信息变得容易,通常是将鼠标光标悬停在变量名称上。这就减少了对匈牙利符号的需要。我自己也遵循一些惯例。的确,现代IDE带走了很多这样的东西,但我还是觉得有点匈牙利的:)。我正在使用: robot_uu用于属性(ms建议使用this.robot,但像这样我不能忘记this)
局部变量和私有/受保护/内部方法的camelCase
公共属性或方法的PascalCase 就是这样:)。我认为代码看起来