All I want to do is make sure that child classes of the class Item implement a static method and I want this to be checked at compile time to avoid runtime errors.
abstract classes with static methods don't seem to work:
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();
}
}
and interfaces don't seem to work either:
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();
}
Is there some workaround for this to have the compiler check if inheriting classes implement a static method with a certain signature or not?
There is a workaround i figured out for your scenario:
Hope this helps!!
Seems it's not possible, take a look: Is there a way to force a C# class to implement certain static functions?
By definition a static method cannot be implemented in derived classes.
It doesn't make sense to force clients to implement a static method - static methods are "immutable." (There's probably a better way to describe them but that's all my mind can come up with right now!)
If some sort of overriding is required, I would consider re-visiting the design, possibly using some form of a combination of singletons and injection.
This cannout be done.
Have a look at Why can’t I have abstract static methods in c#?