誰かが私にC#のコーディング規約を説明できますか?


14

私は最近Unity3Dを使い始め、主にC#でスクリプトを書き始めました。私は通常Javaでプログラミングしているので、違いはそれほど大きくありませんが、正しいコースにいることを確認するためにクラッシュコースを参照しました

ただし、C#に対する私の最大の好奇心は、メソッド名の最初の文字を大文字にすることです(たとえば、Java:getPrime()C#:GetPrime()aka:Pascal Case?)。これには正当な理由がありますか?私はクラッシュコースのページから、明らかに。たとえば、Javaが使用します。

注:言語には独自のコーディング規約があることは理解していますが(Pythonの方法はすべて小文字で、この質問にも当てはまります)、なぜ標準に正式化されないのか理解できませんでした。


18
私はあなたが見てcamelCasePascalCaseそしてunderscore_caseそれらのうちの1つが正常であると(比較的正常であっても)他の人がそうでないと言うことができるとは本当に思いません。@dasblinkenlightが言ったように、それはarbitrary意的な選択です。C#の慣例が変わっていると思わせる唯一のことは、「通常はJavaでプログラムする」ことであり、したがってJavaに対して行われた任意の選択に慣れているということです。
Carson63000

代わりに.. :) Unity3DのためにJavaScriptを使用
Lipis

@Lipisなぜ-個人的な趣味以外?;-)
アホダー

@AedonEtLIRAは完全に個人的な.. :)気にユニティにどのような言語に関係なくお楽しみください..あなたが使用して終了しないだろう決して...
Lipis

@Lipisこれまでのところ素晴らしい。たくさんの添えものと私はまだそれにお金を落としていません。しかし、私は構造化されたスタイルのC#(c / c ++)とjavaを好みます。
アホダー

回答:


27

命名規則は、出版社のarbitrary意的な選択を表しています。言語自体には、Javaで行う方法でメソッドに名前を付けることを禁止するものはありません。最初の文字が文字/アンダースコアであり、他のすべての文字が文字、数字、またはアンダースコアである限り、C#は文句を言う。ただし、.NETに付属するクラスライブラリは、Microsoftが内部で採用している規則に従っています。マイクロソフトはこれらのガイドライン公開しているため、他の人が独自のクラスライブラリにも採用することを選択できます。Microsoftのガイドラインに従うか無視するかはユーザーの選択ですが、同じ命名ガイドラインに従うと、他のユーザーがコードに慣れるまでの時間が短縮される場合があります。


しかし、通常はコンベンションの背後にある理論的根拠があり、「これには正当な理由はありますか?」私はそれがなぜではなくなぜなのかという質問として理解しています。
greenoldman

パブリック/内部/静的メンバーおよびすべてのメソッドのパスカル。プライベート用のラクダ。スキャン中にトークンの範囲を区別するのに役立ちます。thisキーワードは、同じことを行います。スタイルの選択肢は、彼らがエイリアン表示されることも、実用的である
Gusdor

23

おそらくパスカル/デルファイの影響によるものです。結局、C#とDelphiの作成者は同じ人物でした(Anders Hejlsberg)。

Delphiのコーディング規約は一般的に、この点ではC#と同じです。参照http://www.econos.de/delphi/cs.html#ObjectPascal_Proceduresまたはhttp://wiki.delphi-jedi.org/index.php?title=Style_Guide#Method_Namingを -偶然の一致?


4
これに対する+1は、この特定の任意の選択がC#に対して行われた実際の理由である可能性があるものを提供するためです。
マキシマスミニマス

4

他の回答に加えて、メソッドのキャメルケースを持つことは、キャメルケースを命名に使用するプライベートメンバー、パラメータ、およびメソッド変数の名前と競合する可能性があることを意味します。Java(およびC#1.0)では、デリゲートの使用は厄介で珍しいため、これはそれほど一般的ではありません。現代のC#では、まったく一般的ではありませんが、前代未聞ではありません。


1
C#プライベートフィールドではアンダースコアを使用しないでください(たとえば、blogs.msdn.com / b / brada / archive / 2005/01/26 / 361363.aspxを参照してください)。
イェンス

1
言語の構成を区別するためにケーシングに依存することは、言語で許可されているかどうかに関係なく、本当に悪い考えです。
gbjbaanb

4
@Telastynそのステートメントはかなり衝撃的です。.NETクラスライブラリのほとんどは、この規則を使用しています。
MattDavey

1
@Dunk突然私のコンベンションはどうですか?私は単にコメントを渡すだけでしたが、この問題については意見がありません:)
MattDavey

2
@MarjanVenema:あなたが何を話しているのかはわかりませんが、C#は大文字と小文字を区別するため、同様のケースのメンバー間で衝突が発生する可能性があります。これは、ライブラリレベルで作業しているVB.NETなどの大文字と小文字を区別しない実際の言語を実際に使用している場合に、楽しくエキサイティングになります。
ワイアットバーネット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.