代码之家  ›  专栏  ›  技术社区  ›  Edward Tanguay

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

  •  20
  • Edward Tanguay  · 技术社区  · 15 年前

    我想做的就是 确保 那个班的孩子 实施 静止的

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

    错误:静态成员 不能标记为 重写、虚拟或抽象

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

    对于这一点,是否有一些解决方法让编译器检查继承类是否实现具有特定签名的静态方法?

    5 回复  |  直到 15 年前
        1
  •  20
  •   viky    15 年前

    我为您的场景想出了一个解决方法:

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

    希望这有帮助!!

        2
  •  4
  •   Community CDub    8 年前
        3
  •  3
  •   Maarten Bodewes    12 年前

    强制客户机实现一个静态方法是没有意义的——静态方法是“不可变的”(可能有更好的方法来描述它们,但这就是我现在能想到的!)

        5
  •  0
  •   Darin Dimitrov    15 年前

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

    推荐文章