web-dev-qa-db-ja.com

定数のためのC#の命名規則?

private const int THE_ANSWER = 42;

または

private const int theAnswer = 42;

個人的には、現代のIDEでは、ALL_CAPSは奇妙に見えるので、キャメルケースを使うべきだと思います。どう思いますか?

369
mmiika

推奨される命名規則と大文字表記規則は、定数にPascalの大文字小文字を使用することです(Microsoftには StyleCop という名前のツールがあり、すべての優先規則を文書化し、ソースのコンプライアンスを確認できます-少しtoo多くの人々の好みを保持する肛門)。例えば.

private const int TheAnswer = 42;

Pascalの大文字表記規則は、Microsoftの Framework Design Guidelines にも記載されています。

437
Greg Beech

実際には

private const int TheAnswer = 42;

少なくとも.NETライブラリを見れば、命名規則を決めるのに最もよいIMOである - それであなたのコードは場違いに見えない。

65
bh213

視覚的には、大文字が有効な方法です。それはそのようにとても認識可能です。一意性のためにそして推測する機会を残さないために、私はUPPER_CASEに投票します!

const int THE_ANSWER = 42;

:大文字は、定数がページ上部の同じファイル内で使用される場合や、インテリセンスの目的で使用される場合に役立ちます。しかし、もしそれらが独立したクラスに移動されるのであれば、大文字を使ってもそれほど大きな違いはありません。

public static class Constant
{
    public static readonly int Cons1 = 1;
    public static readonly int coNs2 = 2;
    public static readonly int cOns3 = 3;
    public static readonly int CONS4 = 4;
}

// Call constants from anywhere
// Since the class has a unique and recognizable name, Upper Case might might lose its charm
private void DoSomething(){
var getCons1 = Constant.Cons1;
var getCons2 = Constant.coNs2;
var getCons3 = Constant.cOns3;
var getCons4 = Constant.CONS4;
 }
49
usefulBee

私はまだconst値のために大文字を使いますが、これはどんな特別な理由よりも習慣から外れています。

もちろん、何かがconstであることがすぐにわかります。私に質問は:私たちは本当にこの情報が必要ですか?それはエラーを避けるために私たちを何らかの方法で助けてくれるでしょうか? constに値を代入した場合、コンパイラは何かおかしなことをしたと言ってきます。

私の結論は:ラクダの包装で行きなさい。たぶん私も私のスタイルを変えるでしょう;-)

編集:

何かがハンガリー語のにおいがするというのは、実際には有効な議論ではない、IMO。質問は常にあるべきです。それは助けになりますか、それともそれは傷つきますか?

ハンガリー人が助ける場合があります。今日はそれほど多くありませんが、まだ存在しています。

22
Treb

まず、ハンガリー記法は、パラメータのデータ型または使用目的を表すために接頭辞を使用することです。のためのマイクロソフトの命名規則はハンガリー記法にノーと言います http://en.wikipedia.org/wiki/Hungarian_notationhttp://msdn.Microsoft.com/ja-jp/library/ms229045 .aspx

ここに述べられているように大文字を使用することは推奨されていません:パスカルケースは受け入れ可能なコンベンションおよびスクリーミングキャップです。 http://en.wikibooks.org/wiki/C_Sharp_Programming/Naming

マイクロソフトはまた、既存のスキームと一致するようにすれば大文字を使用できるとも述べています。 http://msdn.Microsoft.com/en-us/library/x2dbyw72.aspx

これでかなり要約できます。

15
user31939

ハンガリー人をハンガリー人に任せる。

例では、私は決定的な記事を省略してそしてただ行きます

private const int Answer = 42;

その答えですか、それとも答えですか。

* Pascalとしての編集を厳密に正しいものにしました、しかし、私は質問が 人生、宇宙、そしてすべてのもの へのより多くの答えを求めていると思っていました。

12
dove

その記事 Constants(C#Programming Guide) で、Microsoftは次の例を示しています。

class Calendar3
{
    const int months = 12;
    const int weeks = 52;
    const int days = 365;

    const double daysPerWeek = (double) days / (double) weeks;
    const double daysPerMonth = (double) days / (double) months;
}

したがって、定数の場合、Microsoftは camelCasing の使用を推奨していることをと表示します。ただし、これらの定数はローカルで定義されていることに注意してくださいlocally

おそらく、外部から見える定数の命名には大きな関心があります。実際には、Microsoftは.NETクラスライブラリのpublic constantsfields。ここではいくつかの例を示します。

最初の2つは PascalCasing の例です。 3番目は、Microsoftの Capitalization Conventions の2文字の頭字語に従っています( pi は頭字語ではありません)。そして、4番目のものは、2文字の頭字語の規則が、1文字の頭字語またはE(数学定数 eを表す識別子など)に拡張されることを示唆しているようです )。

さらに、Microsoftは大文字表記規則ドキュメントで、フィールド識別子はPascalCasingを介して名前を付ける必要があることを非常に直接的に述べており、 MessageQueue.InfiniteTimeout および Int32.Min の次の例を示しています。

public class MessageQueue
{
    public static readonly TimeSpan InfiniteTimeout;
}

public struct UInt32
{
    public const Min = 0;
}

結論:パブリック定数にはPascalCasingを使用してくださいconstまたはstatic readonlyフィールドとして文書化されています)。

最後に、私が知る限り、Microsoftは、質問に示されている例に示されているように、private識別子の特定の命名規則または大文字表記規則を支持していません。

11
DavidRR

ALL_CAPSはCとC++の働き方からとったものです。この記事 ここ はスタイルの違いがどのように生じたかを説明します。

Visual Studioなどの新しいIDEでは、型、スコープ、およびそれらが定数であるかどうかを簡単に識別できます。そのため、厳密には必要ありません。

FxCop およびMicrosoft StyleCop ソフトウェアは、ガイドラインを提供し、コードをチェックするのに役立ちますので、誰もが同じように動作します。

6
John

私は実際にはここPascalCaseを好む傾向があります - しかし習慣から、私はUPPER_CASEの罪を犯しています...

6
Marc Gravell