Есть базовый класс фигуры, имеющий метод количество сторон.
Наследники переопределяют его — метод класса треугольника вернёт 3, а квадрата — четыре.
Понятно, что базовый метод имеет описание как virual, а неследники — override.
Но т.к. для реализации этого метода не нужен инстанс объекта, то хочется сделать его статиком.
А незззяя... Вернёт
error CS0112: A static member 'pkg.test.SomeFigure' cannot be marked as override, virtual, or abstract
Как такое делать лучше — забить на статик, или...?
Здравствуйте, Аноним, Вы писали:
А>Есть базовый класс фигуры, имеющий метод количество сторон. А>Наследники переопределяют его — метод класса треугольника вернёт 3, а квадрата — четыре.
Если первое — то зачем тебе виртуальность? Если второе — зачем статик? Всё верно компилятор ругается — "вы определитесь чего хотите, а я уж скомпилирую".
Re[2]: Теория. Метод static + virtual. Как?
От:
Аноним
Дата:
17.09.10 14:08
Оценка:
Здравствуйте, Jesmus, Вы писали:
J>Как ты хочешь обращаться к методу? J>Треугольник.ВзятьКоличествоСторон() J>Квадрат.ВзятьКоличествоСторон() J>или J>объектФигура.ВзятьКоличествоСторон()? J>Если первое — то зачем тебе виртуальность? Если второе — зачем статик? Всё верно компилятор ругается — "вы определитесь чего хотите, а я уж скомпилирую".
Всё верно, но это же константа. И хочется вынести это в метаданные объекта. В атрибуты что ли..
Здравствуйте, Аноним, Вы писали:
А>Есть базовый класс фигуры, имеющий метод количество сторон. А>Наследники переопределяют его — метод класса треугольника вернёт 3, а квадрата — четыре. А>Понятно, что базовый метод имеет описание как virual, а неследники — override. А>Но т.к. для реализации этого метода не нужен инстанс объекта, то хочется сделать его статиком. А>А незззяя... Вернёт А>error CS0112: A static member 'pkg.test.SomeFigure' cannot be marked as override, virtual, or abstract
А>Как такое делать лучше — забить на статик, или...?
Здравствуйте, Аноним, Вы писали:
А>Всё верно, но это же константа. И хочется вынести это в метаданные объекта. В атрибуты что ли..
Ну пусть тогда метод базового класса и берет значение из аттрибутов класса. Без переопеределений вообще.
Хотя я бы за такой дизайн по голове бил бы. Простое наследование превратится в вычитку документации — какие аттрибуты надо переопределять. Отлавливать неполное переопределение будет сложнее опять же — abstract уже не катит. Оно того действительно стоит и дает какие то преимущества?