10

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

我正在考虑从 VB.NET 切换以利用某些语言功能(CCR 和 yield),并且了解这种差异背后的原因可能会使过渡更容易。

[更新]好吧,我三天前冒险了。学习 C# 并不是特别难,但我几乎记不起我在 90 年代后期的 C++ 日子。

区分大小写让我讨厌吗?没有我想的那么多……而且我发现它实际上是有利的。实际上,我对 CCR 作为异步协调编程模型感到非常满意。如果我有更多时间在当前项目上,我会将代码库移植到 C# 中以充分利用。不过对我的客户不公平。

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

[更新]

好吧,我已经用 C# 编程将近一年了。我真的很喜欢这门语言,我真的很讨厌转用 VB(尤其是在不可避免的情况下!)

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

4

14 回答 14

22

C# 区分大小写,因为它采用了所有区分大小写的 C 风格语言。这是从内存这里是一个MSDN 链接,现在对我不起作用,我无法验证。

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

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

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

于 2009-01-30T05:30:11.977 回答
7

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

于 2009-01-30T05:30:00.713 回答
6

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

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

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

于 2009-01-30T05:56:55.370 回答
6

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

在使用该语言多年后,我开始真正享受这一点,当您可以简单地从单词的大小写中读取信息时,代码更容易阅读。

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

Foo foo = new Foo();

我经常这样做,非常有用。如果您在这样的更有用的情况下考虑它:

Image image = Image.LoadFrom(path);

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

于 2009-01-30T06:05:56.973 回答
4

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

于 2009-01-30T05:33:51.327 回答
4

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

在三年前创建 C 时,可能有一些充分的理由使 C 区分大小写,但似乎没有任何记录说明原因。Jeff Atwood 写了一篇好文章,主张区分大小写可能不再有意义

于 2009-01-30T05:51:33.023 回答
2

可能是从 C、C++、Java 等复制而来,或者可能故意保持相同,以便与其他语言相似。

于 2009-01-30T05:29:25.563 回答
2

这只是 C# 语言设计团队的品味问题。我敢打赌这是为了与其他 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 前缀私有字段可能更容易发现。它不是什么大问题,而且我个人仍然会做我刚才所说的不好的事情(所以起诉我!)。

于 2009-01-30T05:35:37.067 回答
1

对于区分大小写的语言,解析也稍微容易一些。只要没有充分的理由选择不区分大小写的方式,何必呢?

于 2009-01-30T05:34:47.847 回答
1

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

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

作为一个使用 BASIC 多年的人,我非常厌倦开发人员对同一个变量使用不同的情况。这种事情看起来非常令人厌烦,并鼓励草率的编程。如果您懒得理直气壮——还有什么是您懒得做的?

于 2009-01-30T05:42:06.273 回答
1

来自 .NET Framework Developer's Guide Capitalization Conventions,区分大小写:

大写指南的存在只是为了使标识符更易于阅读和识别。大小写不能用作避免库元素之间名称冲突的方法。

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

于 2009-02-14T18:27:20.033 回答
1

关于它为什么区分大小写,我最好的猜测是因为 Unix 是区分大小写的。C 之父 Dennis Ritchie 也是 Unix 的共同编写者,因此他编写的语言与当时可用的环境相吻合是有道理的。C# 只是从它的祖先那里继承了这个。我认为这对微软来说是一个很好的决定,因为 Windows 路径不区分大小写。

于 2012-08-26T00:53:11.420 回答
0

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

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

编译为好像任何外壳变体中的 SomeField 是相同的变量。

就个人而言,我认为这是一个坏主意。它鼓励懒惰和/或粗心。当它无关紧要时,为什么还要麻烦正确地封装它呢?好吧,当我们这样做的时候,也许编译器应该允许拼写错误,比如SoemField++

于 2009-01-30T15:22:56.960 回答
-1

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

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

于 2009-01-30T16:00:39.597 回答