如何强制inheritance类在C#中实现静态方法?

我想要做的就是确保Item的子类实现静态方法,并且我希望在编译时检查它以避免运行时错误。

使用静态方法的抽象类似乎不起作用:

错误:无法将静态成员标记为覆盖,虚拟或抽象

public abstract class Item { public static abstract Item GetHistoricalItem(int id, DateTime pastDateTime); } public class Customer : Item { public static override Customer GetHistoricalItem(int id, DateTime pastDateTime) { return new Customer(); } } public class Address : Item { public static override Address GetHistoricalItem(int id, DateTime pastDateTime) { return new Address(); } } 

和接口似乎也不起作用:

错误:客户未实现接口成员GetHistoricalItem()

 public class Customer : Item, HistoricalItem { public static Customer GetHistoricalItem(int id, DateTime pastDateTime) { return new Customer(); } } public class Address : Item, HistoricalItem { public static Address GetHistoricalItem(int id, DateTime pastDateTime) { return new Address(); } } interface HistoricalItem { Item GetHistoricalItem(); } 

有没有一些解决方法让编译器检查inheritance类是否实现了具有特定签名的静态方法?

我找到了适合您的方案的解决方法:

 public class Customer : Reference, IHistoricalItem { } public class Address : Reference
, IHistoricalItem { } public interface IHistoricalItem { } public class Reference where T : IHistoricalItem, new() { public static T GetHistoricItem(int id, DateTime pastDateTime) { return new T(); } }

希望这可以帮助!!

这件事要做。

看看我为什么不能在c#中使用抽象静态方法?

强制客户端实现静态方法没有意义 – 静态方法是“不可变的”。 (可能有更好的方式来描述它们,但我现在可以想出来了!)

如果需要某种覆盖,我会考虑重新访问设计,可能使用某种forms的单体和注射的组合。

看起来这是不可能的,看看: 有没有办法强制C#类实现某些静态函数?

根据定义,静态方法不能在派生类中实现。