代码之家  ›  专栏  ›  技术社区  ›  Cragly

层次相关字符串值的点表示法

  •  1
  • Cragly  · 技术社区  · 16 年前

    我的应用程序中有很多常量字符串值,为了代码重用和可读性,我希望在C中使用强类型对象。我希望能够像这样引用字符串值:

    Category.MyCategory  //returns a string value ie “My Category”
    Category.MyCategory.Type.Private //returns a string value ie “private”
    Category.MyCategory.Type.Shared //returns a string value ie “shared”
    

    我首先实现了以下类,每个类都包含一个公共字符串值字段列表,其中包含一个公开子级的公共属性。

    类别,我的类别,类型

    不过,我已经知道这不是一个可行的方法,所以可以在这个问题上提出一些建议。

    其中的一个例子是,我使用联合类向Atom提要添加一个类别。我正在动态创建此提要中的项目,因此需要使用如图所示的符号。

    item.Categories.Add( new SyndicationCategory
                     {
                         Scheme = Category.PersonType, 
                         Label="My Category",
                         Name=Category.MyCategory.Type.Private  
                     });
    
    3 回复  |  直到 16 年前
        1
  •  1
  •   Rob Fonseca-Ensor    16 年前

    将字符串常量保持在需要它们的地方,imo拥有一个刚刚声明常量的类是OO反模式

        2
  •  1
  •   Mark Seemann    16 年前

    为什么不简单地将它们作为具有重写ToString实现的类来实现呢?

    public class MyCategory
    {
        private readonly MyType type;
    
        public MyCategory()
        {
            this.type = new MyType();
        }
    
        public MyType Type
        {
            get { return this.type; }
        }
    
        // etc.
    
        public override string ToString()
        {
            return "My Category";
        }
    }
    
    public class MyType
    {
        public override string ToString()
        {
            return "My Type";
        }
    
        // more properties here...
    }
    

    然而,出于一般目的,考虑字符串本身是否不代表更好地建模为完整对象的概念。

        3
  •  0
  •   Anders Fjeldstad    16 年前

    我完全同意罗伯的观点。如果您仍然想要一个“字符串包”,您可以尝试使用嵌套类,如下所示。我不太喜欢,但它很管用。

    public class Category 
    {
        public class MyCategory 
        {
            public const string Name = "My Category";
    
            public class Type
            {
                public const string Private = "private";
                public const string Shared = "shared";
            }
        }
    }