Все части решения находятся здесь, распределены по нескольким ответам.
- Создайте интерфейс, как обычно.
- Создайте абстрактный базовый класс, который реализует интерфейс,и определяет любые статические члены, которые будут необходимы.
- Наследуйте от абстрактного базового класса, а не интерфейса при создании ваших реальных реализаций.
Хотя это все еще не позволит вамПолучив доступ к Subclass.MyParameterNames из AbstractClass.MyParameterNames, вы сможете убедиться, что это свойство доступно во всех реализациях AbastractClass.
Однако, в зависимости от специфики вашего варианта использования, может быть лучше выставить MyParameterNamesв качестве нестатического члена, и просто реализуйте его как одноэлементный, чтобы для каждого подкласса была только одна копия списка.В любом случае вам все равно нужно будет инициализировать экземпляр класса, чтобы получить нужные данные.
По крайней мере, чтобы получить статические данные, вам нужно знать, что такое специфический подкласс, с которым вы имеете дело, поэтому нет смысла пытаться взглянуть на него через интерфейс, который может быть произвольным, неизвестным типом данных.