如何强制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#类实现某些静态函数?
根据定义,静态方法不能在派生类中实现。