1

C# のクラスに推奨される明確なレイアウトはありますか?

これはレイアウトの質問の例です...

 public class DinnerParty {

      //>>>>should the const fields that are initiallised with a value be at the top?
    private const int CostOfFoodPerPerson = 25;

      //>>>>should the constructor always be placed near the top of the class?
    public DinnerParty(int numberOfPeople, bool Health, bool fancyDecorations) {
        NumberOfPeople = numberOfPeople;
        this.fancyDecorations = fancyDecorations;
        Health = healthyOption;
        CalculateCostOfDecorations(fancyDecorations);
    }

      //>>>>backing private fields should always precede properties that use them?
    private int numberOfPeople;
    public int NumberOfPeople {
        get {
            return numberOfPeople;
        } 
        set {
            CalculateCostOfDecorations(fancyDecorations);
            numberOfPeople = value;
        }
    }

      //>>>>where do these fields go?
    private bool fancyDecorations;
    public decimal costOfBeveragePerPerson;

    private bool healthyOption;
    public bool HealthyOption{
        set {
            value =  healthyOption;
            if (healthyOption) {
                costOfBeveragePerPerson = 5.0M;
            } else {
                costOfBeveragePerPerson = 20.0M;
            }
        }
    }

     //>>>>should methods be placed after the constructor and all properties?
    public decimal costOfDecorations = 0;
    void CalculateCostOfDecorations(bool fancy) {
        if (fancy) {
            costOfDecorations = (numberOfPeople * 15.0M) + 50.0M;
        } else {
            costOfDecorations = (numberOfPeople * 7.50M) + 30.0M;
        }
    }

    public decimal CalculateCost(bool xfancy, bool xhealthyOption) {
        decimal totalCost = (numberOfPeople * (CostOfFoodPerPerson + costOfBeveragePerPerson)) + costOfDecorations;
        if (xhealthyOption) {
            return totalCost * 0.95M;
        } else {
            return totalCost;
        }
    }
 }
4

3 に答える 3

1

StyleCop には次のルールがあります。

  • クラス、構造体、またはインターフェイス内では、要素は次の順序で配置する必要があります。

    • 定数フィールド
    • 田畑
    • コンストラクター
    • ファイナライザー (デストラクタ)
    • デリゲート
    • イベント
    • 列挙型
    • インターフェース
    • プロパティ
    • インデクサー
    • メソッド
    • 構造体
    • クラス
  • 同じタイプの要素は、アクセス レベルごとに次の順序で配置する必要があります。

    • 公衆
    • 内部
    • 保護された内部
    • 保護された
    • プライベート
  • すべての静的要素は、同じ型のすべてのインスタンス要素の上に配置する必要があります。

詳細については、ドキュメントを参照してください。

于 2012-09-12T08:08:24.400 に答える
1

私は傾向があります:

  • イベント
  • フィールド (定数を含む)
  • プロパティ (インデクサーと自動プロパティを含む)
  • コンストラクター
  • パブリック / プロテクト / 内部 / プライベート メソッド。
  • ネストされた型

とはいえ、不必要に物を移動するとマージの痛みが生じるため、ファイルの順序をそのまま尊重するようにしています。

クラスの内容を書く決定的な方法があるかどうかはわかりません。あったとしても、ひとつまみの塩でそれを取るだろうが、結局のところ、これも誰かの意見に過ぎない. 一貫性を保ち、コードをきちんと保つようにしてください (私は個人的に、Enter何度も押しすぎてランダムな空白がコード ファイルに散らばっているのが嫌いです)。

マージを快適に保つためのもう 1 つの重要な要素は、コードの書式設定に一貫性を持たせることです (インラインと改行のブラケット、単一行の if ステートメントを囲むブラケットなど)。

于 2012-09-12T08:16:15.643 に答える
0

個人的に、私は...

  • 変数宣言
  • メソッド
  • プロパティ ...この順序で。

他の人にはそれぞれの好みがあります。私が考えることができる唯一の難しいルールは、一貫性を保つことです.あなたの好みに関係なく、あなたが明確で予測可能であれば、次の人が拾うのがはるかに簡単になります.

于 2012-09-12T08:10:31.310 に答える