10

C# で大文字と小文字を区別する理由は何ですか?

いくつかの言語機能 (CCR と yield) を利用するために VB.NET から切り替えることを検討しています。この違いの背後にある理由を理解すると、移行が容易になる可能性があります。

【追記】3日前に思い切って行ってきました。C# を学ぶのは特に難しいことではありませんでしたが、90 年代後半の C++ 時代のことはほとんど思い出せませんでした。

大文字と小文字の区別は私を悩ませていますか? 思ったほどではありません...さらに、実際には有利であることがわかりました。私は実際、非同期調整プログラミング モデルとしての CCR に満足しています。現在のプロジェクトにもっと時間があれば、コード ベースを C# に移植して最大限に活用したいと思います。しかし、私のクライアントには公平ではありません。

現在のプロジェクトを評価していますが、どこにでもブロック スレッドが見られます。ああああ!!!

[アップデート]

さて、私は C# でプログラミングを始めて 1 年近くになります。私はこの言語を本当に楽しんでおり、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 が 30 年前に作成されたとき、C で大文字と小文字を区別するのにはいくつかの正当な理由があった可能性がありますが、その理由に関する記録はないようです。Jeff Atwood は、大文字と小文字の区別がもはや意味をなさない可能性があることを提唱する優れた記事を書きました。

于 2009-01-30T05:51:33.023 に答える
2

これは、C# 言語デザイナー チームの好みの問題でした。他の C ファミリー言語との共通性のためだったに違いありません。ただし、private フィールドとそれに関連付けられたプロパティが最初の文字の場合のみ異なるなど、いくつかの悪いプログラミング プラクティスにつながります。

編集:

なぜこれが悪いと考えられるのでしょうか。

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 に答える
2

おそらくC、C++、Javaなどからコピーされたものか、他の言語に似ているように意図的に同じままになっている可能性があります。

于 2009-01-30T05:29:25.563 に答える
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 パスでは大文字と小文字が区別されないため、これは Microsoft 側の適切な決定だったと思います。

于 2012-08-26T00:53:11.420 に答える
0

次のようなコードを見たいと思います。

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

大文字と小文字のバリエーションの SomeField が同じ変数であるかのようにコンパイルされます。

個人的には、それは悪い考えだと思います。怠惰や不注意を助長します。とにかく問題ではないのに、なぜ物事を適切にケーシングする必要があるのでしょうか。さて、私たちがそれに取り組んでいる間、おそらくコンパイラはSoemField++?のようなスペルミスを許可する必要があります。

于 2009-01-30T15:22:56.960 に答える