如何制作子类所需要的静态类描述

本文关键字:静态类 描述 何制作 子类 | 更新日期: 2023-09-27 17:49:28

编辑:我不一定要求一个属性。如果有一种方法可以创建一个必选属性,那么也可以。

我不能做abstract static在c#中,所以我怎么能使一个类型的静态属性Description,并要求它在子类型?

public abstract class TypeA
{
    public /*required*/ static String Description {get;}
}
public class TypeB : TypeA
{
    //description not implemented, compile error
}

请注意,我知道当它不是静态的时候可以这样做,但是我觉得当它是静态的时候类型的描述更正确。例:TypeB.Description很清楚,instance.Description最多是误导。

这里建议检查构造函数中的属性是目前为止我遇到过的最好的答案,但我仍然希望有一个编译时的限制

如何制作子类所需要的静态类描述

继承和静态成员不能混用。

不能继承静态成员。如果基类和派生类碰巧都有一个具有相同签名的成员,则这些成员之间没有任何关系。

这意味着你不能强制子类"实现静态成员"。这也是为什么接口没有静态成员的原因。

我恐怕不相信你想要达到的目标是可能的,但是我以前用过类似的方法,就是使用类属性,这可能会给你想要的结果:

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

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

没有办法继承静态成员,因为它是由类型拥有的。你可以只继承所有都是静态的非静态类型,如下所示:

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