类VS const中的静态getter-only属性

时间:2014-11-13 08:24:50

标签: c# class inheritance

我有一个基类型和从该基类型派生的几种类型。基类型具有一个属性FriendlyName,其中包含每个派生类型的常量信息(因此不是在每个实例级别上,而是在类型级别上)

我该如何实现?现在,我有这个(做我想做的事)

public class BaseClass
{
    protected static string friendlyName;

    public static string FriendlyName {
        get {
            return friendlyName;
        }
    }
}

public class DerivedClassOne : BaseClass {
    public DerivedClassOne() {
        friendlyName = "A super duper derived class";
    }
}

public class DerivedClassTwo : BaseClass {
    public DerivedClassOne() {
        friendlyName = "Yet another derived class";
    }
}

还有另一种方法可以做我想要的吗?或者这是做事的方式还是我应该为每个派生类型使用具有相同名称的const字符串?

修改 (希望)有点清楚。我有一个MVC应用程序。有问题的类是模型。在视图中,我显示类型@model IEnumerable<BaseType>的列表。对于集合中的每个项目,我想要显示一个描述性文本,其中包含有关当前类型的信息,而不仅仅是typeof(item).ToString(),而是一个“友好”的描述。

2 个答案:

答案 0 :(得分:1)

我认为你不想在这里使用静态。如果您的方法是静态的,即使没有该类的实例,也可以调用它。此外,静态方法的值将是最后创建的实例(如果没有创建 - null)。如果你想使用静态,你应该为每个派生类型实现它。

public class BaseClass
{
    protected readonly string friendlyName;

    public string FriendlyName {
        get {
            return friendlyName;
        }
    }
}

public class DerivedClassOne : BaseClass {
    public DerivedClassOne() {
        friendlyName = "A super duper derived class";
    }
}

public class DerivedClassTwo : BaseClass {
    public DerivedClassOne() {
        friendlyName = "Yet another derived class";
    }
}

答案 1 :(得分:1)

进行编辑。我只需创建一个自定义属性,或者使用.Net框架中的现有属性并使用attibute装饰我的类。

[FriendlyName("Hey this is my cool class")]
public class DerivedClassOne : BaseClass 
{
...
}
所有类型的

等等。

然后使用Type.GetCustomAttributes来读取属性。就如此容易。