如何创建子类所需的静态类描述?

时间:2014-03-10 10:55:43

标签: c#

编辑:我不一定要求财产。如果有办法制作必需的属性,那也没关系。

我无法在C#中执行abstract static,那么如何创建类型的静态属性Description并在子类型中要求它?

public abstract class TypeA
{
    public /*required*/ static String Description {get;}
}

public class TypeB : TypeA
{
    //description not implemented, compile error
}

请注意,我知道这可以在它不是静态时完成,但我觉得当它是静态的时,类型的描述更加正确。例如。 TypeB.Description非常明确,instance.Description充其量只是误导。

这个答案here建议在构造函数中检查一个属性是我到目前为止遇到的最好的,但我仍然喜欢编译时的限制。

3 个答案:

答案 0 :(得分:1)

继承和静态成员不会混合。

您无法继承静态成员。如果基类和派生类恰好每个都有一个具有相同签名的成员,那么这些成员就不会相互关联。

这意味着您不能强制子类“实现静态成员”。这也是接口没有静态成员的原因。

答案 1 :(得分:1)

我不相信你想要达到的目标是可能的,但是,我之前以类似的方式使用的东西可能会使用类属性,这可能会给你你想要的结果: / p>

[Description("This is a Type B")]
public class TypeB : TypeA
{

}

然后,您将能够从Type而不是实例访问此描述。您也可以使用AttributeUsageAttribute自动从基类继承。您甚至可以定义一个特殊的属性,如果使用了抛出异常或类似的东西 - 如果没有设置它会显然给你一个运行时错误。

答案 2 :(得分:0)

没有办法继承静态成员,因为它归类型所有。您只能继承非静态类型,其中所有内容都是静态的,如下所示:

    public abstract class TypeA
    {
        public class Description
        {
            public static String Name { get; set; }
        }
    }
    public class TypeB : TypeA
    {
        public string AccessToStaticMember { get; private set; }
        public TypeB()
        {
            AccessToStaticMember = Description.Name;
        }
    }