为什么C#区分大小写?

使C#区分大小写的原因是什么?

我正在考虑从VB.NET切换到利用一些语言function(CCR和yield),理解这种差异背后的原因可能会使转换变得更容易。

[更新]三天前,我接受了这次暴跌。 学习C#并不是特别难,但我几乎记不起90年代后期的C ++日。

案例敏感度让我烦恼吗? 不像我想的那么多……加上我发现它确实有利。 我真的很高兴CCR作为异步协调编程模型。 如果我在当前项目上有更多时间,我会将代码库移植到C#中以充分利用它。 但对我的客户来说不公平。

现在评估我当前的项目,我看到无处不在的阻塞线程! 哈啊!

[UPDATE]

好吧,我已经用C#编程近一年了。 我真的很喜欢这种语言,我真的很讨厌越过VB(尤其是当它不可避免时!)

区分大小写的事情? 甚至不是问题

C#具有敏感性,因为它采用的是C风格的语言,它们都是区分大小写的。 这是来自内存这里是一个MSDN链接 ,现在不能为我工作,我无法validation。

我还想指出这是一个非常有效的用例:

public class Child { private Person parent; public Person Parent { get { return parent;} } } 

是的,您可以使用成员变量的前缀来解决这个问题,但有些人不喜欢这样做。

他们可能在想“我们不希望人们在一个地方使用SoMeVaRiAbLe而在另一个地方使用sOmEvArIaBlE。

我认为案件可以传达信息的事实是一个很好的理由。 例如,按照惯例,类名,公共方法和属性按惯例以大写字母开头。 相反,字段和局部变量以小写字母开头。

使用这种语言多年后,我真的很喜欢这个,当你只需从单词的大写中读取信息时,代码就更容易阅读。

这就是人们有时这样做的原因,也是有道理的:

 Foo foo = new Foo(); 

我一直这样做,这非常有用。 如果你在一个更有用的情况下考虑它,如下所示:

 Image image = Image.LoadFrom(path); 

有时候将实例称为与类名称相同的东西是有道理的,并且区分它们的唯一方法就是shell。 在C ++中,区分大小写变得更加有用,但这是另一个故事。 如果你有兴趣,我可以详细说明。

考虑以下伪代码中的变量名称:

 class Foo extends Object { ... } ... foo = new Foo(); 

区分大小写允许使用大小写来分隔类名和实例的约定; 这些公约在发展中并不罕见。

C#inheritance了C和Java的区分大小写,它试图模仿它以使开发人员更容易转移到C#

在三十年前创建C时,可能有一些很好的理由使C区分大小写,但似乎没有任何关于原因的记录。 杰夫阿特伍德撰写了一篇很好的文章,主张该案例的敏感性可能不再有意义 。

我认为具有区分大小写的标识符可以通过使用命名约定使代码更具可读性,甚至没有命名约定,由区分大小写强制执行的一致性可确保您始终以相同的方式编写同一实体。

可能是从C,C ++,Java等复制过来的,或者可能是故意保持相同的,以便它与其他langauges相似。

这只是C#langauge设计师团队的品味问题。 我愿意打赌这是为了与其他C家族语言的共生。 然而,它会导致一些糟糕的编程习惯,例如私有字段及其关联属性,仅在第一个字母的情况下不同。

编辑:

为什么这可能是错误的。

 class SomeClass { private int someField; public int SomeField { get { return SomeField; } // now we have recursion where its not wanted and its // difficult for the eye to pick out and results in a // StackOverflowException. } } 

使用_或m前缀私有字段可能会更容易发现。 它不是一个巨大的重要人物,我个人认为我刚刚说的很糟糕(所以起诉我!)。

对于区分大小写的语言,解析也更容易一些。 只要没有充分的理由选择不区分大小写的方式,为什么还要费心呢?

从您的角度来看,您正在以非常有限的方式看待这一点。 语言设计者必须考虑其他一系列考虑因素:文化原因,与其他语言的兼容性,通用编码实践等

所有现代语言都使用区分大小写:哪些不是?

作为使用BASIC多年的人,我厌倦了为同一个变量使用不同情况的开发人员。 这种事情看起来非常烦人,并鼓励草率编程。 如果你不能为纠正这个案子而烦恼 – 还有什么不能让你烦恼的呢?

从.NET Framework开发人员指南资本化约定 ,区分大小写:

资本化指南仅用于使标识符更易于阅读和识别。 套管不能用作避免库元素之间名称冲突的手段。

不要以为所有编程语言都区分大小写。 他们不是。 名称不能仅因个案而异。

我最好猜测它区分大小写的原因是因为Unix区分大小写。 C的父亲丹尼斯·里奇(Dennis Ritchie)也共同编写了Unix,因此他所编写的语言与当时可用的环境相吻合是有道理的。 C#刚从它的祖先那里inheritance了这个。 我认为这是微软的一个很好的决定,因为Windows路径不区分大小写。

我假设您希望看到以下代码:

 SomeField=28; someField++; somefield++; SOMEFIELD++; 

编译好像任何套管变异中的SomeField是同一个变量。

就个人而言,我认为这是一个坏主意。 它鼓励懒惰和/或粗心大意。 无论如何,为什么要在没有问题的情况下正确包装? 好吧,虽然我们在这里,也许编译器应该允许拼写错误,比如SoemField++

命名。 名称很难得到,你不想在谈论类似的东西时创建一个新名称,或者必须使用一些符号来区分它们。

此类方案是您要分配给字段的构造函数中的字段或参数的属性。