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了太多次)。

帮助合并保持可口性的另一个重要因素是对代码格式进行一致的设置(行内与换行括号,单行 if 语句周围的括号等)。

于 2012-09-12T08:16:15.643 回答
0

就个人而言,我...

  • 变量声明
  • 方法
  • 属性...按此顺序。

其他人有自己的喜好。我能想到的唯一硬性规则是保持一致——不管你的偏好如何,如果你清楚且可预测,那么下一个人就更容易接手。

于 2012-09-12T08:10:31.310 回答