C#:コード作成のガイドライン

少し前まで、このトピックへのコメントで AlexSは、C#で記述された.Netテーマのコード例のHabréでの設計に関する合意を使用するという考えを表明しました。 私はこれらのソースから利用可能なオファーを少し研究しました:

submain.com/blog/FreeCVBNETCodingGuidelinesEbookDownload.aspx

idesign.net/idesign/DesktopDefault.aspx

C#で記述されたコードを記述するための最も基本的な規則を説明するドラフトをコンパイルしました。



私は提案する:

-このドラフトについて話し合う。

-必要なすべての変更を加えます。

-HabréでC#コードを書く標準として承認します。

さらに、他のすべてのC#プログラマーに対してhabrahabrコミュニティが推奨するドキュメントを作成することを提案します。



カットの下にドラフトテキストがあります。 私は皆にそれを議論し、適切な編集をするように招待します。





1.要件



1.1パスカルケーシング



名前について説明します。

•カスタムクラス、列挙、イベント、デリゲート、および構造を含むすべての型定義。

•譲渡の価値。

•読み取り専用フィールドと定数。

•インターフェイス。

•メソッド。

•名前空間(名前空間);

•プロパティ。

•パブリックフィールド。

名前空間 SampleNamespace

{

列挙型 SampleEnum

{

FirstValue、

Secondvalue

}



struct SampleStruct

{

public int FisrtField;

public int SecondField;

}



インターフェイス ISampleInterface

{

void SampleMethod();

}



パブリック クラス SampleClass:SampleInterface

{

const int SampleConstValue = 0xffffff;



readonly int SampleReadonlyField;



public int SampleProperty

{

得る ;

セット ;

}



public int SamplePublicField;



SampleClass()

{

SampleReadonlyField = 1;

}



デリゲート void SampleDelegate();

event SampleDelegate SampleEvent;



public void SampleMethod()

{

}

}

} *このソースコードは、 ソースコードハイライターで強調表示されています。


1.2キャメルケーシング



名前について説明します。

•ローカル変数。

•メソッドの引数。

•保護フィールド。

protected int sampleProtectedField;



int SampleMethod( int sampleArgument)

{

int sampleLocalVariable;

} *このソースコードは、 ソースコードハイライターで強調表示されています。


1.3接尾辞と接頭辞



次の接尾辞と接頭辞が適用されます。

•カスタム例外クラスの名前は、常に接尾辞「Exception」で終わります。

•インターフェイス名は常にプレフィックス「I」で始まります。

•ユーザー属性の名前は常に接尾辞「Attribute」で終わります。

パブリック クラス SampleException:System。 例外

{

public SampleException()

{

}

}



インターフェイス ISample

{

void SampleMethod();

}



[システム。 AttributeUsage (System。AttributeTargets .All、Inherited = false 、AllowMultiple = true )]

封印された クラス SampleAttribute:System。 属性

{

パブリック SampleAttribute()

{

}

} *このソースコードは、 ソースコードハイライターで強調表示されています。


1.4略語



名前に略語を使用する場合、大文字化は2文字の略語の対象となります。他の略語では、最初の文字のみを大文字にする必要があります。

名前空間 Sample.IO

{

}



クラス HttpUtil

{

} *このソースコードは、 ソースコードハイライターで強調表示されています。


2.推奨事項



2.1命名方法



動詞オブジェクト構造を使用してメソッドに名前を付ける

ShowUserInfo()




特定のケースでは、値を返すメソッドの場合、動詞「Get」のペアで動詞オブジェクトを使用し、オブジェクトの場合は、戻り値の説明を使用します。

GetUserId()




2.2変数、フィールド、プロパティ



•変数に名前を付けるときは、 Itなどの省略形オプションの使用を避け、 indextempを使用します 。 ハンガリー語表記を使用したり、プライベートメンバーのみに使用したりしないでください。 単語を短くせず、 numではなくnumberを使用します。

•パブリックフィールドまたは保護フィールドを使用せず、代わりにプロパティを使用します。

•自動プロパティを使用する



2.3追加の推奨事項



•中間変数を使用して、関数の結果のブール値を条件式ifに渡します。

bool boolVariable = GetBoolValue();

if (boolVariable)

{

} *このソースコードは、 ソースコードハイライターで強調表示されています。


2.4コードサイズ



•500行を超えるコードのファイルを避けます。

•200行を超えるコードを持つメソッドを避けます。

•5つ以上の引数を持つメソッドを避け、構造を使用して多数のパラメーターを渡します。

•1行のコードは120文字を超えてはなりません。



3.議論すべき論点



3.1クローズドフィールド



最初のオプション

プライベートフィールド名は常にプレフィックス「m_」で始まり、残りの名前はPascalケーシングを使用して記述されます。

private int m_SamplePrivateField;


2番目のオプション

プライベートフィールド名は常に「m」プレフィックスで始まり、残りの名前はPascalケーシングを使用して記述されます。

private int mSamplePrivateField;


3番目のオプション

プライベートフィールド名は常に接頭辞「_」で始まり、残りの名前はキャメルケーシングを使用して記述されます。

private int _samplePrivateField;




3.2追加要件



•開始と終了の中括弧を常に新しい行に配置します。

•式にコードが1行しか含まれていない場合でも、if式には常に中括弧を使用します。



All Articles