如何制作子类所需要的静态类描述
本文关键字:静态类 描述 何制作 子类 | 更新日期: 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;
}
}