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