为什么C#区分大小写?

时间:2009-01-30 05:26:12

标签: c# case-sensitive

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

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

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

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

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

[UPDATE]

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

和案例敏感的事情?甚至不是问题

14 个答案:

答案 0 :(得分:19)

C#具有敏感性,因为它采用的是C风格的语言,它们都是区分大小写的。这是来自内存的MSDN link,这对我来说现在无法验证。

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

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

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

答案 1 :(得分:7)

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

答案 2 :(得分:6)

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

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

这就是为什么人们有时会这样做,而且它有意义:

Foo foo = new Foo();

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

Image image = Image.LoadFrom(path);

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

答案 3 :(得分:5)

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

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

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

答案 4 :(得分:4)

C#从C和Java继承了大小写敏感性,它试图模仿它以使开发人员更容易转移到C#

在三十年前创建C时,可能有一些很好的理由使C区分大小写,但似乎没有任何关于原因的记录。杰夫阿特伍德写了一篇赞成case sensitivity might no longer make sense的好文章。

答案 5 :(得分:3)

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

答案 6 :(得分:2)

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

答案 7 :(得分:2)

这只是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前缀私有字段可能会更容易发现。它不是一个巨大的大人物,我个人认为我刚刚说的很糟糕(所以起诉我!)。

答案 8 :(得分:1)

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

答案 9 :(得分:1)

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

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

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

答案 10 :(得分:1)

从 .NET Framework开发人员指南 Capitalization Conventions,案例敏感度:

  

存在资本化指引   仅仅是为了使标识符更容易   阅读并认识。套管不能   用作避免名字的手段   库元素之间的冲突。

     

不要假设所有编程   语言区分大小写。他们是   不。名称不能因情况而异   单独

答案 11 :(得分:1)

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

答案 12 :(得分:0)

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

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

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

就个人而言,我认为这是一个坏主意。它鼓励懒惰和/或粗心大意。无论如何,为什么要打扰这个东西呢?好吧,虽然我们在这里,也许编译器应该允许拼写错误,例如SoemField++

答案 13 :(得分:-1)

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

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