我无法在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建议在构造函数中检查一个属性是我到目前为止遇到的最好的,但我仍然喜欢编译时的限制。
答案 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;
}
}