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

时间:2009-12-11 10:52:38

标签: c# asp.net

我的应用程序中有很多常量字符串值,我想在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”

我已经开始实现以下类,每个类都包含一个公共字符串值字段列表,其中包含公开属性的公共属性。

类别,MyCategory,类型

但是我已经知道这不是可行的方法,所以可以就这一点提出一些建议。

这方面的一个示例是我使用Syndication类向原子提要添加类别。我正在动态创建此Feed中的项目,因此需要使用如图所示的表示法。

item.Categories.Add( new SyndicationCategory
                 {
                     Scheme = Category.PersonType, 
                     Label="My Category",
                     Name=Category.MyCategory.Type.Private  
                 });

3 个答案:

答案 0 :(得分:1)

保持你的字符串常量接近你需要它们的地方,IMO有一个只声明常量的类是一个OO反模式

答案 1 :(得分:1)

为什么不简单地将它们实现为具有重写的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...
}

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

答案 2 :(得分:0)

我完全同意罗布。如果你仍然想要一个“字符串包”,你可以尝试使用嵌套类,如下所示。我真的不喜欢它,但它确实有效。

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";
        }
    }
}