【问题标题】:Where should constants for events go in a C# projectC# 项目中事件的常量应该放在哪里
【发布时间】:2011-03-17 18:05:37
【问题描述】:

我对 C# 非常陌生,我有一个约定问题:

与事件关联的常量应该存储在哪里?

是否应该将它们包含在我定义 EventArgs 的同一位置?

作为解释,我想为名为“_difficulty”的私有字段定义不同的常量,并通过我重写的 EventArgs 类的构造函数进行设置。

假设常量是, 公共常量int EASY = 0,MEDIUM = 1,HARD = 2; (我假设命名约定全部大写)

或者,我可以创建一个像“DifficultyConstants”这样的类,然后将它们插入那里。

我只是好奇这个约定是什么,并且对于遵循 OOP 最有意义。

【问题讨论】:

    标签: c# oop events constants coding-style


    【解决方案1】:

    惯例是不这样做。您所描述的内容通常会被实现为 enum 而不是一组命名的整数常量。

    【讨论】:

      【解决方案2】:

      由于您确实添加了 EASY、MEDIUM、HARD 等级别,这些级别彼此处于序号级别,我希望使用 enum。就像在其他语言中一样,您可以使用public enum Difficulty {EASY, MEDIUM, HARD}

      但是你把这样的枚举放在哪里呢?如果你想让它在很多不同的 eventArgs 中使用,我建议使用一些抽象基类:

      public class LevelEventArgs : EventArgs
      {
          public enum Difficulty
          { 
              EASY, 
              MEDIUM, 
              HARD 
          }
      }
      

      然后,让你所有的 EventArgs 都继承自这个类。

      【讨论】:

        【解决方案3】:

        我会使用枚举来代替:

        public enum DifficultyLevel {
          Easy = 0,
          Medium = 1,
          Hard = 2
        }
        

        这样,所有值都定义在一个结构中,该结构被很好地定义为连接到类型,而不是可以连接到任何东西的松散常量。

        将您的私有字段声明为:

        private DifficultyLevel _difficulty;
        

        这样赋值:

        _difficulty = DifficultyLevel.Easy;
        

        通过为枚举指定数值,如果需要,您还可以将它们与已知整数值相互转换:

        _difficulty = (DifficultyLevel)1;
        
        int level = (int)_difficulty;
        

        【讨论】:

          【解决方案4】:

          常量应该在使用中最常关联的对象附近或对象中声明。如果您对常量的主要用途是创建自定义 EventArgs,那么这听起来是一个定义它们的好地方。如果在任何地方都使用它们,通常建议使用 Common 或 CommonUtil 库。

          一个提示;考虑为这些值创建一个枚举,而不是将它们作为单独的常量。它们是一组相关的、互斥的值,表示状态;枚举值的教科书定义。

          【讨论】:

            【解决方案5】:

            看起来更像你想要一个枚举

                public enum Difficulty
            {
               Easy,
               Medium,
               Hard
            }
            

            【讨论】:

              【解决方案6】:

              这完全取决于您的代码是如何设置的。在某些情况下,它可能位于您的项目或解决方案中的公共命名空间中。

              我有几个项目位于一个公共命名空间中,即 Company.Common

              【讨论】:

                猜你喜欢
                • 2023-04-09
                • 2010-09-15
                • 2019-04-10
                • 1970-01-01
                • 2011-02-17
                • 1970-01-01
                • 1970-01-01
                • 2010-11-01
                • 1970-01-01
                相关资源
                最近更新 更多