所有我想做的是确保该类项目的子类实现静态方法,我想这在编译时进行检查,以避免运行时错误。我该如何强制继承类来在C#中实现静态方法?
抽象类的静态方法似乎不工作:
ERROR: A static member cannot be marked as override, virtual, or abstract
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();
}
}
和接口似乎并没有工作,要么:
ERROR: Customer does not implement interface member 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();
}
有没有为了让编译器检查继承类是否实现了一个带有某个签名的静态方法?
我有一个类的项目,各种对象继承,例如客户,地址等。如果一个类是Item类型,那么我希望能够调用一个名为GetHistoricalItem()的工厂方法。所以我希望能够说Address address = Address.GetHistoricalItem(...)。我想在编译时知道所有继承Item的类都可以做到这一点。它应该像实例方法一样工作。 – 2009-12-15 09:11:34
@EdwardTanguay这是很久以前的事,但你最好创建一些历史类(实例),它包含从中检索地址的常规方法。例如,注册将是一个好名字。 – 2012-11-26 18:27:31