Теория. Метод static + virtual. Как?
От: Аноним  
Дата: 17.09.10 13:56
Оценка:
Есть базовый класс фигуры, имеющий метод количество сторон.
Наследники переопределяют его — метод класса треугольника вернёт 3, а квадрата — четыре.

Понятно, что базовый метод имеет описание как virual, а неследники — override.
Но т.к. для реализации этого метода не нужен инстанс объекта, то хочется сделать его статиком.
А незззяя... Вернёт
error CS0112: A static member 'pkg.test.SomeFigure' cannot be marked as override, virtual, or abstract

Как такое делать лучше — забить на статик, или...?
Re: Теория. Метод static + virtual. Как?
От: Lloyd Россия  
Дата: 17.09.10 13:57
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Как такое делать лучше — забить на статик, или...?


Предположим, что компилятор не ругался бы. Как бы вы тогда использовали этот метод?
Re: Теория. Метод static + virtual. Как?
От: Jesmus Россия  
Дата: 17.09.10 14:03
Оценка: +3
Здравствуйте, Аноним, Вы писали:

А>Есть базовый класс фигуры, имеющий метод количество сторон.

А>Наследники переопределяют его — метод класса треугольника вернёт 3, а квадрата — четыре.

Как ты хочешь обращаться к методу?

Треугольник.ВзятьКоличествоСторон()
Квадрат.ВзятьКоличествоСторон()

или

объектФигура.ВзятьКоличествоСторон()?

Если первое — то зачем тебе виртуальность? Если второе — зачем статик? Всё верно компилятор ругается — "вы определитесь чего хотите, а я уж скомпилирую".
Re[2]: Теория. Метод static + virtual. Как?
От: Аноним  
Дата: 17.09.10 14:08
Оценка:
Здравствуйте, Jesmus, Вы писали:

J>Как ты хочешь обращаться к методу?

J>Треугольник.ВзятьКоличествоСторон()
J>Квадрат.ВзятьКоличествоСторон()
J>или
J>объектФигура.ВзятьКоличествоСторон()?
J>Если первое — то зачем тебе виртуальность? Если второе — зачем статик? Всё верно компилятор ругается — "вы определитесь чего хотите, а я уж скомпилирую".

Всё верно, но это же константа. И хочется вынести это в метаданные объекта. В атрибуты что ли..
Re: Теория. Метод static + virtual. Как?
От: _FRED_ Черногория
Дата: 17.09.10 14:11
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть базовый класс фигуры, имеющий метод количество сторон.

А>Наследники переопределяют его — метод класса треугольника вернёт 3, а квадрата — четыре.
А>Понятно, что базовый метод имеет описание как virual, а неследники — override.
А>Но т.к. для реализации этого метода не нужен инстанс объекта, то хочется сделать его статиком.
А>А незззяя... Вернёт
А>error CS0112: A static member 'pkg.test.SomeFigure' cannot be marked as override, virtual, or abstract

А>Как такое делать лучше — забить на статик, или...?


Например, так
Автор: _FRED_
Дата: 29.07.10
.

А>Как такое делать лучше — забить на статик, или...?


Например, через атрибуты.
Help will always be given at Hogwarts to those who ask for it.
Re[3]: Теория. Метод static + virtual. Как?
От: Jesmus Россия  
Дата: 17.09.10 14:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Всё верно, но это же константа. И хочется вынести это в метаданные объекта. В атрибуты что ли..


Ну пусть тогда метод базового класса и берет значение из аттрибутов класса. Без переопеределений вообще.

Хотя я бы за такой дизайн по голове бил бы. Простое наследование превратится в вычитку документации — какие аттрибуты надо переопределять. Отлавливать неполное переопределение будет сложнее опять же — abstract уже не катит. Оно того действительно стоит и дает какие то преимущества?

Есть и другие варианты с теми же проблемами.
Re: Теория. Метод static + virtual. Как?
От: маген Россия https://ru.linkedin.com/pub/alexey-smorkalov/4/283/8b8
Дата: 18.09.10 14:00
Оценка:
А>Но т.к. для реализации этого метода не нужен инстанс объекта, то хочется сделать его статиком.

А ЗАЧЕМ вам его хочется сделать статиком, как бы вы его использовали, без привязки к конкретному объекту?
Re: Теория. Метод static + virtual. Как?
От: dims12 http://www.relativity.ru
Дата: 19.09.10 07:06
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как такое делать лучше — забить на статик, или...?


Лучше забить на статик. Просто сделайте метод "Взять количество сторон" и пусть он возвращает разные константы для разных фигур.

Я думаю, статики -- это отклонение от ООП. Поэтому, если хочется написать по ООП-шному, то лучше без них.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.