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

C# 类VS const中的静态getter-only属性,c#,class,inheritance,C#,Class,Inheritance,我有一个基类型和从该基类型派生的几个类型。基类型有一个属性FriendlyName,其中包含每个派生类型的常量信息(因此不是在每个实例级别上,而是在类型级别上) 我将如何实现这一点?现在,我有这个(它不能满足我的需要) 有没有其他方法可以满足我的要求?或者这是处理问题的方法,还是应该为每个派生类型使用具有相同名称的常量字符串 编辑: (希望)把事情弄清楚一点。我有一个MVC应用程序。这门课就是模型课。在视图中,我显示了类型@model IEnumerable的列表。对于集合中的每一项,我都希望显

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

我将如何实现这一点?现在,我有这个(它不能满足我的需要)

有没有其他方法可以满足我的要求?或者这是处理问题的方法,还是应该为每个派生类型使用具有相同名称的常量字符串

编辑:
(希望)把事情弄清楚一点。我有一个MVC应用程序。这门课就是模型课。在视图中,我显示了类型
@model IEnumerable
的列表。对于集合中的每一项,我都希望显示一个包含当前类型信息的描述性文本,而不仅仅是
typeof(item).ToString()
,而是一个“友好”的描述。

我认为您不希望在这里使用静态。如果您的方法是静态的,那么即使没有该类的实例,也可以调用该方法。另外,静态方法的值将是最后创建的实例(如果未创建任何实例,则为null)。如果您想使用static,您应该为每个派生类型实现它

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

供您编辑。我将简单地创建一个自定义属性,或者使用.NETFramework中现有的属性,并用attibute装饰我的类

[FriendlyName("Hey this is my cool class")]
public class DerivedClassOne : BaseClass 
{
...
}
诸如此类


然后使用
Type.GetCustomAttributes
读取属性。就这么简单

如果派生类型为常量,则将字段移动到派生类型。否则,我希望看到派生类型之间的冲突。您可以将基类的属性标记为
virtual
(我认为),并在派生类中重写它。问题是我想确保每个派生类都有一个FriendlyName属性,不管是什么。因此,我建议将它放在基类中,并在派生类的CTOR中设置值。这就是为什么我建议将基类属性标记为
virtual
。这只是猜测,我可能错了。测试它并看看它是否有效非常简单。为什么需要这个属性呢。它的用途是什么?如何使用?也许这会带来更好的答案。不,请不要误会我。无论如何,你必须包括你尝试的解决方案,但你应该谈论实际问题。在你的问题中,在我们提出要求之前,你从未谈论过它。正如你所看到的,一旦你解释了你的实际问题,你得到答案的速度有多快因此,用尝试性的解决方案来解释实际问题,可以在很短的时间内为您带来很好的答案。
[FriendlyName("Hey this is my cool class")]
public class DerivedClassOne : BaseClass 
{
...
}