Как и многие программисты на C#, я в конце концов обнаружил, что нуждаюсь в функциональности статических абстрактных методов. Я полностью осознаю, почему это невозможно сделать, и это имеет смысл, но мне нужен обходной путь.
Я работаю над игрой XNA, но, к счастью, проблема не связана со слишком большим количеством кода XNA. У меня есть абстрактный базовый класс Note и различные производные от него подклассы. В какой-то момент я буду рисовать их на экране, поэтому мне придется загружать текстуры (каждый подкласс будет иметь разные текстуры и разное количество текстур), пользователь вводит параметр размера, масштабирует текстуры по размеру. , а затем перебрать мой List и Draw() каждый. Эти текстуры довольно большие, и каждый экземпляр данного подкласса будет использовать одни и те же текстуры с одинаковым масштабированием до тех пор, пока пользователь не укажет другой размер, отсюда и моя мотивация использовать статический подход.
Как я выяснил, абстрактные статические методы недоступны. Мне бы хотелось иметь возможность изменять размер одной текстуры за раз (всякий раз, когда пользователь изменяет параметр размера) для каждого подкласса, сохранять масштабированную текстуру как статический объект Texture2D и просто ссылаться каждый раз, когда я буду рисовать экземпляр подтип заметки. Таким образом, я мог бы избежать наличия объекта Texture2D в каждом экземпляре данного класса, производного от Note, а также необходимости масштабировать Texture2D в каждом экземпляре. Кроме того, мне бы хотелось иметь возможность эффективно применять «все конкретные подклассы Note должны реализовывать этот статический метод».
Я не совсем уверен, что было бы лучшим подходом. Я бы предпочел способ сделать это без необходимости наличия статического метода в каждом подклассе, например:
NoteA.LoadScaledTex(scale);
NoteB.LoadScaledTex(scale);
NoteC.LoadScaledTex(scale);
...
foreach(Note n in notes) {..}
но я не уверен в другом элегантном решении.