我不明白为什么微软 VS 预设让 C# 使用大写草泥马命名风格。
之前我 Swift 用小写草泥马命名风格夹杂匈牙利命名风格已经习惯了, 结果现在得在命名方面另外动脑筋了。
![]() |
1
villivateur 252 天前
……也许微软的开发者心里还在骂你为啥不用大驼峰呢
……“草泥马”风格是什么鬼,另外匈牙利风格是异端,经常让变量名莫名其妙的 |
![]() |
2
Biwood 252 天前 via Android ![]() CamelCase 叫大驼峰就好,乱起名字只会增加阅读屏障,简体中文已经够乱的了。再说草泥马也没有驼峰啊。
|
![]() |
3
ShikiSuen OP @villivateur 我轻易不用匈牙利,除非某些私有变数我会用 mut 或者 cst 开头(分别表示常数与变数;好像之前流行用下画线开头)。偶尔我会用 int 或者 str 开头。总之只要不引起歧异就好。对我而言匈牙利是符合变种的小写草泥马命名规则的。
|
4
forgottencoast 252 天前
|
![]() |
5
Rocketer 252 天前 via iPhone ![]() 嗯,C#出身的程序员也会觉得 Java 命名习惯很奇怪。
反正不符合自己多年养成的习惯的东西都是草泥马。 |
6
ComputerIdiot 252 天前 via Android
C#和 F#命名习惯还不一样
|
![]() |
8
dangyuluo 252 天前 ![]() “为什么世界不围着我转”这个系列
|
9
neoblackcap 252 天前
匈牙利命名法是已经过时的东西,但是 C#刚诞生的时候,编译工具以及静态分析工具并不那么强悍。工具并不能在你编写代码的时候就提示你或者帮你推导出类型。那个时候,匈牙利命名法的确起到一定的作用。
C#已经很多年历史了,总不可能把所有的东西推倒重来。但是微软并没有强制你使用特定的代码风格。用 C++写 Windows 程序一样会遇到大量匈牙利命名法的代码,但是一样可以用新的规范。封装好,团队内部有规范统一就可以了。 |
![]() |
10
ysc3839 252 天前
大概是微软的历史习惯
|
11
jjx 252 天前 ![]() 这个, lz 连 c#的历史都不了解一下就来喷
|
![]() |
12
Mirage09 252 天前 via iPhone
无聊..那我还说 python 下划线命名很反人类
|
![]() |
13
Daming 252 天前
为什么 C#默认风格的 { 要单起一行,就不能学 java 放在行尾吗 [doge]
|
14
dcsuibian 252 天前 via Android
@Mirage09
Python 的下划线命名法确实很讨厌,不过倒不是因为它本身。 主要是搜到的不少参考代码甚至第三方库都不太遵守这种约定。例如 cv2.waitKey(),cv2.destroyAllWindows()。 看着 PyCharm 里一堆黄色波浪线脑壳疼。 |
15
liaohongxing 252 天前
我觉得大写开头挺好的
|
16
bthulu 252 天前 ![]() 我不管写什么语言都用大驼峰命名类,小驼峰命名变量。
统一语言变量命名规范,从我做起!!! |
![]() |
17
xuanbg 252 天前
啊……这……世界是围着我转的。吧?确认一下,微软 VS 预设让 C# 使用帕斯卡命名法是不是很奇怪?
什么!你们居然说这是正常的。嘤嘤嘤……这个世界居然没有围着我转。你们就不能哄我一下吗。 |
![]() |
18
cozof 252 天前 via iPhone
C#用大驼峰,又叫帕斯卡命名法。
|
![]() |
19
makelove 252 天前 ![]() py 和 c 这种下划线命名看起来最美观
C#的命名我最受不了,甚至变量和类都是大写开头没有区分,恶心到家了 |
![]() |
20
geelaw 252 天前 via iPhone ![]() @ShikiSuen #3 用 int/str 做匈牙利命名无意义,匈牙利命名的前缀需要体现的是编程语言类型系统外的类型信息,比如一个 ushort * 到底是 bstr ( BASIC 风格字符串)还是 sz (以 0 结尾的字符串),再比如一个 int 到底是 cb (字节的个数)还是 n (对象的个数)……
|
![]() |
21
yolee599 252 天前 via Android
C# 那个是帕斯卡命名法,比匈牙利命名法好看多了
|
![]() |
22
nba2k9 252 天前 ![]() 万能喷射战士
|
![]() |
23
ShikiSuen OP @Daming C#默认风格的 { 要单起一行,是因为那是微软公司内部的 clang-format 风格。
我就用这套风格整 ObjC 的档案正文,读起来超方便。不過 Mozilla 風格也不錯就是了。 |
![]() |
25
litguy 252 天前
上世纪末我们大学时候学 WIN32 编程就是匈牙利命名法
这个是历史遗留问题 不是 C# 的问题 而且匈牙利命名法也不是你说的那样一无是处 |
![]() |
26
sunmker 252 天前
其实微软自己也不怎么遵守的,我以前看 C#高级教程的时候,书中提到过
|
![]() |
29
ColinZeb 252 天前
@makelove 先入为主的习惯问题,我觉得 c#的命名方式已经很丰富了。实际使用中类大写开头(如 new Class 、Class.Static ),方法小括号结尾,属性不带小括号结尾,基本没有分不清的情况
|
32
nothingistrue 251 天前
在微软在设计 C# 的时候,全世界都在用大驼峰法风格(除了当时还处于新生阶段的 Java ),而 C# 是在 VB 、MFC 的基础上改良,不是像 Java 那样完全推到重做,自然就顺延了之前的大驼峰风格。所以并不是微软让 C# 用大驼峰法风格,而是微软在大驼峰风格下诞生了 C#。
确切得说,并没有大驼峰法跟小驼峰法的区别,而是“类型(类、接口等)名称用大驼峰法,保留关键字、成员、方法、变量等用小驼峰法”,跟“全部用大驼峰法(因为不好区分,通常要额外使用匈牙利命名风格)”的区别。C# 除了因为历史原因没法用前者之外,还有一个原因是除了保留关键字,别名(例如 String 的别名 string )、各种语法糖也用小写,导致即使变量用小驼峰还是有混淆,干脆就破罐子破摔了。 |
33
dqzcwxb 251 天前
@nothingistrue #32 "不是像 Java 那样完全推到重做"麻烦细说一下或者给个资料链接谢谢
|
34
nothingistrue 251 天前
@ColinZeb 还是有区别的,比如 Java 当中可以用 People people 定义某人(即 people 隐含 some people 、a people 或者 one people 的意思),C# 就不行,People People 定义出来后你完全不知道 People 代表的是类型还是实例,只能换成 People OnePeople ,或者 CPeople People (万恶的匈牙利命名法)
|
36
frisktale 251 天前
@nothingistrue 啊? C#定义变量的时候不都是小写字母开头嘛,为啥会出现 People People 的情况啊。
|
![]() |
37
qW7bo2FbzbC0 251 天前
你可以入乡随俗,见人说人话,见鬼说鬼话,
也可以定义 IDE 规则,全部按照你的风格来 |
![]() |
38
ColinZeb 251 天前
@nothingistrue 变量一般用 var people,至于属性用 Perple People 吴论如何都有歧义,不如写成 People One😀
|
![]() |
39
clino 251 天前
我投下划线一票,感觉这样阅读起来比较舒服,驼峰读起来比较费尽我本能地就是反感
|
40
nothingistrue 251 天前
|
41
fkdog 251 天前
羊驼不是骆驼好不好?
|
42
Bazingal 251 天前
@nothingistrue 这不是规范的问题,是人的问题,C#一向都是建议变量用小驼峰的
|
44
ComputerIdiot 251 天前 via Android
所以 F#用小驼峰,C#用大驼峰该怎么办呢?
|
![]() |
45
akatquas 251 天前
习惯就好,都是草台班子,别太较真。
|
46
nothingistrue 251 天前
@frisktale #36
@Bazingal #42 用得少,记差了。https://github.com/xamarin/xamarin-forms-samples/blob/main/Todo/Todo/Todo/Models/TodoItem.cs ,现在区别不是太大了,就包( Java)—命名空间( C#),成员 /方法( Java)—字段 /属性 /方法( C#)风格上有区别,不过这上面设计理念就有区别,可能不适应,但适应过去也就没事了。 |
![]() |
47
ychost 251 天前
c++ 默认还是下划线呢
|
![]() |
48
VictorJing94 251 天前 ![]() |
49
wdwwtzy 251 天前 via iPhone
@neoblackcap 太能乱说了,c#从来没有推荐过匈牙利命名法,一直是驼峰
C#命名规范 Type Method Example Namespace Pascal namespace AutofacDemo Class Pascal public class MovieFinder Interface Pascal public interface IFileFinder Pascal public string Name{get;set;} Method Pascal public void Update() Event Pascal event EventHander Change Event Pascal enum Fruits{Apple,Banana} Enum Pascal static string Issuer Controls Pascal btnConfirm, txtBondName Private Camel public int Add(int totalAmt) Parameter Camel var firstName = "Steven" Private Camel private string _firstName Const Upper const int MAX_NUM |
![]() |
50
luckyrayyy 251 天前
下划线有的时候会跟下边框或者带下划线的字体重复,比较恶心...
|
51
frisktale 251 天前
@ragnaroks 我写 c#的时候,无论是方法内的变量,还是类的成员变量都是小写字母开头的,也就在类内部定义方法和属性是大写字母开头的。看了这个贴子我感觉我学了个假的 c#
|
52
zed1018 251 天前 ![]() 看标题我以为是 VS 不让用别的风格了还是咋,原来只是自己不习惯罢了。自己不习惯就把别人批斗一番也是有意思。
“顺我者昌,逆我者亡” |
54
reallittoma 251 天前
@makelove #19 重新定义美观
|
55
PerFectTime 251 天前
啊对对对,你说的都对
|
![]() |
56
ragnaroks 251 天前
|
![]() |
57
elintwenty 251 天前
还是 php 比较好,哪种命名规则都有
|
![]() |
58
pkoukk 251 天前
2022 年了,居然还能遇到用匈牙利的活化石
|
59
userforg2021 251 天前
@ragnaroks 风格可以自定义,不仅能 warning ,甚至能直接 error 。右键项目添加 editorconfig ,可以配置项目的风格。或者 VS 里面 "工具"->"选项"->"文本编辑器"->"C#"->"代码样式",配置全局风格。
|
![]() |
60
sutra 251 天前
和 Anders Hejlsberg 的经历有关吧,以前在 Borland 搞 Delphi 的。
|
61
beyondex 251 天前
@elintwenty 哈哈哈
|
![]() |
62
sutra 251 天前
大驼峰式命名法( upper camel case ),也被称为 Pascal 命名法(英语:Pascal Case )。估计应该和 Anders Hejlsberg 之前在 Borland 搞 Turbo Pascal 的经历更相关。
|
![]() |
63
WebKit 251 天前
草泥马????我有点蒙了。
|
![]() |
64
ragnaroks 251 天前
@userforg2021 你回错人了
|
65
thinkershare 251 天前 ![]() 这个破帖子一看就是骗积分的:
一切都是权衡, 微软官方有出过书籍, 详细讲解过.NET Framework 的命名规则的各种来源, 非常详细, 也说明了各种权衡的利弊. 不学无术就不要想当然的瞎猜. 对于命名规范这种东西, 只有一致性最重要. 另外每个人都有自己的先入为主, 总是感觉自己最初接触的东西才是最自然最舒服的. 有时间去看看这本书: <<Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries>>. 另外这个世界不是围绕你转的, 每个领域都有自己的约定和习俗, 想当然的强迫别人和自己保持一致属于即幼稚还暴戾. |
66
userforg2021 251 天前
@ragnaroks
"成员变量“需要”帕斯卡,否则分析器会 warning 的," |
![]() |
67
ragnaroks 251 天前
@userforg2021 你再理解一下这行文本的意思?
|
68
userforg2021 251 天前
@ragnaroks 分析器是否 warning 是依据代码是否符合配置的命名风格来的,只是辅组代码风格统一。你可以设置属性使用小驼峰命名,分析器会报非小驼峰命名的属性 warning
|
![]() |
69
ragnaroks 251 天前
@userforg2021 这里的语境是默认设置,标题已经明确“VS 预设”,我已经提出关于分析器的内容,你后面的回复相当于让一个大学老师教一线码畜该怎么写代码;如果你实在不能理解,可以在看到此行文本后忽略我
|
70
nothingistrue 251 天前
@userforg2021 编译 waring ,跟代码风格问题是两码事,你最好还是先确认一下成员变量小驼峰法命名,是编译警告,还是代码风格警告。Java 这边,警告( Error )和错误( Waring )是只能由编译器报的,IDE 额外分析出来的问题,必须用其他类型来标识,我不清除 VS 那片是如何。隐藏编译警告,是一种极度危险的行为,因为你在这个 IDE 上隐藏了,换个 IDE 就又出来了。
|
![]() |
71
xFrye 251 天前
平时下划线、驼峰混用的表示,c#那种 pascal 命名也不是不行,匈牙利命名法才是真的反人类好吗。。。
|
![]() |
72
secondwtq 251 天前
我喜欢使用法兰西命名法,a ,a2 ,a3 ... a18
|
![]() |
73
dajj 251 天前
各有各的理由,建议宽容点, 即使一个语言用多种风格我都能接受。
|
![]() |
74
ShikiSuen OP @secondwtq 我写交响时遇到单谱表多个金管 /木管乐手吹奏雷同内容的时候也会写 a2 标记:
https://www.bilibili.com/video/av847136989/ 第 46 小节的 Trombone 就写着 a2 。 |
76
thtznet 251 天前
Pascal 命名法 挺好啊,每个单词都很清晰
|
78
luodaoyi 251 天前
我觉得都不好 我喜欢下划线那种
|
79
charlie21 250 天前 via iPhone
你可以付钱给微软,微软将为你改变
|
![]() |
80
1217950746 250 天前
C# 什么规范都可以,editorconfig 配置一波就可以了
|
81
byzod 249 天前
说到这个,id 开头的到底要怎么写
比如 id table 见过 idTable ,iDTable ,IdTable 和 IDTable |