Прежде всего, я понимаю причины, по которым интерфейс или абстрактный класс (в терминологии .NET / C #) не могут иметь абстрактные статические методы. Тогда мой вопрос больше сосредоточен на лучшем дизайнерском решении.
Мне нужен набор «вспомогательных» классов, каждый из которых имеет свои собственные статические методы, так что если я получу объекты A, B и C от стороннего поставщика, у меня могут быть вспомогательные классы с такими методами, как
AHelper.RetrieveByID(string id);
AHelper.RetrieveByName(string name);
AHelper.DumpToDatabase();
Поскольку все мои классы AHelper, BHelper и CHelper будут в основном иметь одинаковые методы, представляется целесообразным переместить эти методы в интерфейс, из которого эти классы затем наследуются. Однако из-за того, что эти методы должны быть статическими, я не могу использовать универсальный интерфейс или абстрактный класс для всех их производных.
Я всегда мог сделать эти методы нестатичными, а затем создавать экземпляры таких объектов, как
AHelper a = new AHelper();
a.DumpToDatabase();
Однако этот код не кажется мне интуитивно понятным. Каковы ваши предложения? Должен ли я отказаться от использования интерфейса или абстрактного класса в целом (ситуация, в которой я сейчас нахожусь), или это может быть реорганизовано, чтобы выполнить дизайн, который я ищу?