Как можно определить интерфейс или абстрактный класс, который вынудит реализовывать публичную константу (отображаемое пользователям наименование класса, нужно вывести список до того как юзверь тыкнет в заинтересовавший его класс) и статический метод (например GetInstance)?
Ответ
Никак.
Это не поддерживается языком.
Вы можете сэмулировать константу уровня экземпляра класса через свойство с одним лишь геттером:
interface ISomething
{
string ClassName { get; }
}
Статические методы в интерфейс не вписываются никак, вообще. В текущей концепции вы получаете доступ к статическому объекту по имени класса, а не по экземпляру объекта. А поддержка интерфейсов реализована обычным образом, через таблицы виртуальных методов.
Тем не менее, в будущих версиях языка возможны изменения, разрешающие схожую функциональность (generic-условия на наличие статического метода). Design team языка C# обсуждает эту возможность.
Вот пример того, как динамически проверить наличие статического метода:
interface ISomething
{
}
static class SomethingChecker
{
public static Func
Здесь рабочий пример использованием: http://ideone.com/bPyoEf
Комментариев нет:
Отправить комментарий