質問
どのような推論は、C#の場合は、機密作るの後ろに存在する?
私はいくつかの言語機能(CCRおよび収率)を利用するにはVB.NETからの切り替えを考慮し、より容易な移行を行うことがあり、この違いの背後にある理由を理解しています。
[UPDATE] さて、私は3日前に思い切って。学習C#は特に難しいされていない、私はやっとしかし、私のC ++ 90年代後半に日を覚えている可能性があります。
大文字と小文字の区別は私に迷惑ですか?私は...と思ったのだプラス私はそれが実際に有利であることを発見しています。できるだけ多くありません私は実際に非同期協調プログラミングモデルとしてCCRと本当にうれしいです。唯一の私は、現在のプロジェクトに多くの時間を持っていた場合、私は最大限に活用するためにC#にポートにコードベースを思います。しかし、私のクライアントに公正ではないでしょう。
今、私の現在のプロジェクトを評価し、私はどこでもブロックされたスレッドを見ています!えーえ!!!
の [UPDATE] の
さて、私は今、ほぼ一年のためにC#でプログラミングをしてきました。私は実際に言語を楽しんでいる、と私は本当にVB(それが避けられない場合は特に!)
にクロスオーバー嫌いとケース感度の事?いなくても問題
解決
C#がケースsensistiveです。これは、メモリから、ここで右私のために働いていない MSDNリンクのですされます今、私は確認することはできません。
私も、これは非常に有効なユースケースであることを指摘したいと思います:
public class Child
{
private Person parent;
public Person Parent
{
get { return parent;}
}
}
はい、あなたのメンバ変数にこの使用して接頭辞を回避することができますが、一部の人々はそれを行うには好きではありません。
他のヒント
おそらく彼らは、我々は別の1つの場所とsOmEvArIaBlEにSoMeVaRiAbLeを使用している人々を望んでいない」考えていた。
私はケースが情報を伝えることができるという事実は非常に良い理由だと思います。例えば、慣例により、クラス名、パブリックメソッドとプロパティは、慣例により、大文字で始まり。そして逆に、フィールドやローカル変数は、小文字で始めます。
年間の言語を使用した後、私はあなたが単に言葉の筐体から情報を読み取ることができたときにコードが読みする方がはるかに簡単です、本当にこれを楽しみに来てます。
そして、人々は時々これを行う理由です、それが意味をなすことができます:
Foo foo = new Foo();
私はすべての時間が、それは非常に便利だということを行います。あなたはこのようなより有用な状況でそれについて考える場合:
Image image = Image.LoadFrom(path);
それはちょうど、クラス名と同じもののインスタンスを呼び出すために、時には理にかなっているし、それらを見分けるための唯一の方法は、筐体です。 C ++では大文字と小文字の区別がさらに便利になり、それはまた別の話です。もし興味があるなら、私は手の込んだことができます。
次の擬似コードで変数名を考えてみます:
class Foo extends Object { ... }
...
foo = new Foo();
有するケース感度は別のクラス名およびインスタンスにケースを使用して規則を可能にします。こうした規則は、開発の世界では全く珍しくありません。
C#のは、それが容易に開発者はC#
に移動するために作るために模倣しようとCとJava、からケース感度を継承しますそれは30年前に作成されたときにCの大文字と小文字が区別させるためのいくつかの理由があったかもしれませんが、なぜ上のすべてのレコードがあるように思えません。ジェフアトウッドは、大文字と小文字の区別はもはや意味を成さないかもしれないために提唱良い記事を書いたのます。
私は大文字と小文字が区別識別子を有する命名規則を使用して、コードをより読みやすくすることができると思い、よく、さらには命名規則せずに、大文字と小文字の区別によって強制一貫性は同じエンティティが常に同じように書かれていることを保証します。
おそらく等C、C ++、Java(登録商標)、からコピーまたは他のlangaugesが持っているものになるように、その同様の目的で同様に維持することができる。
これは、C#のlangaugeデザイナーチームの味だけの問題でした。私はそれが他のCファミリ言語とcomonalityのためだった賭けることを喜んで。しかし、このようなプライベートフィールドとしていくつかの悪いプログラミングの実践につながるんし、そのassocialtedプロパティは、最初の文字のみの場合には異なります。
EDITます:
なぜこれが悪いcosideredされる可能性があります。
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の父は、UNIXを共同書きましたので、それは彼が書いた言語はその時点で利用可能な環境と一致することを意味します。 C#のは、ちょうどその祖先からこれを継承しました。私は、これは、Windowsのパスは大文字と小文字を区別しませんということで、Microsoftの一部には良い決断だったと思います。
私はあなたのようなコードを見てみたいと思います仮定します
SomeField=28;
someField++;
somefield++;
SOMEFIELD++;
任意ケーシング変動にSomeFieldが同じ変数であるかのようにコンパイルされます。
個人的に、私はそれが悪いアイデアだと思います。それは怠惰および/または不注意を奨励しています。なぜ正しく、それはとにかく問題ではありません事をケーシングわざわざ?我々はそれをしている間、まあ、たぶんコンパイラはSoemField++
のように、スペルミスを許可する必要がありますか?
ネーミング。名前がで来るのは難しいです、あなたは似た何かについて話したときに、新しい名前を作成するために持っているか、それらを離れて設定するために、いくつかの表記を使用する必要がありますする必要はありません。
このようなシナリオはあなたがフィールドに割り当てるしようとしているコンストラクタ内のフィールドまたは引数のプロパティがあります。