Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Общие вопросы по .NET и C# > переопредедение переменной в классе |
Автор: Rays 9.8.2010, 19:40 |
Доброго времени суток! Помогите разобратся с проблемой: Имеется класс "1", в котором объявляется переменная "x" и дальше используется в методе этого класса. Есть класс "2", производный от класса "1", в котором тоже объявляется переменная "х", которая тоже должна использоваться в методе класса "1". Но, т.к. в классе "1" уже есть переменная "х" - она ее переопределяет. Подскажите, как сделать так, что бы переменная "х" класса "2" оставалась? Вот что пишет студия: 2.х скрывает наследуемый член 1.х. Если предполагается скрытие, используете ключевое слово new. Эм.. куда его использовать?)) Я пробовал - не помогает, все-равно переопределяет значение переменной. |
Автор: Rays 9.8.2010, 19:55 | ||||
Хм.. т.е. так нельзя сделать?)) Ну ладно, плохо...) Вот код, но думаю, он уже не нужен:
Смысл в том, что бы подставлять разные значения перпеменных в один и тот же метод. |
Автор: azesmcar 9.8.2010, 20:19 | ||
А откуда базовому классу знать о своих потомках?
хм..я чего-то не понимаю? чем передача параметров не устраивает? |
Автор: mrbrooks 10.8.2010, 07:56 |
может он имеет ввиду разные типы данных? |
Автор: azesmcar 10.8.2010, 08:00 |
может быть ![]() откровенно говоря код я не осилил, но тогда ему нужно не наследование а generic. |
Автор: mrbrooks 10.8.2010, 08:02 |
так или иначе - но в таких темах нужен мелафон ![]() |
Автор: ДобренькийПапаша 10.8.2010, 10:54 | ||
Ещё бы, когда видишь такой код на С++ это нормально, но когда видишь такой код под .NET это вызывает удивление, поскольку человек не читает спецификацию и не в курсе, что благодаря Intellisense основанному на работе с метаданными можно давать нормальные имена переменным и не стесняться их делать длинными (и понятными) ![]() |
Автор: azesmcar 10.8.2010, 11:00 |
Это ненормально на любом языке..ну может разве что на branfuck-e?! |
Автор: Amp 10.8.2010, 12:21 | ||
Мне кажется, что для реализации математических алгоритмов это нормально. Есть набор формул в литературе с устоявшимися специфическими короткими именами переменных (которые даже могут не нести никакой смысловой нагрузки, например имена каких-либо коэффициентов - a, b, c) - почему бы не перенести это в код? Другой человек, имея соответствующую подготовку, достаточно быстро вникнет в такой код, быстро соотнеся его с изложенными формулами в статьях. |
Автор: Mephisto 10.8.2010, 12:52 | ||||||||
брррр. Причем тут спецификация .NET и Intellisense? Одно дело платформа, другое приблуда к студии MS. Под .NET пожно писать и на шарпдевелопе и на монодевелопе, да и в любом блокноте, даже в консольном. Никаких Intellisense'ов там не будет. В других студиях другие средства заменяющие его, иногда даже лучше. А еще мне не понятно почему в С++ нельзя, дословно
И Intellisense тут ни при чем. Я пользуюсь KDevelop. Начиная с версии 4 у него навигация и автопостроение документации ИМХО на голову выше при работе с С++. Очень сильно напоминает работу в студии с установленным ReSharper. Кто использует, тот понимает.
Это нормально. Два поля с одинаковым названием не бывает в нете. Да и в плюсах это по хорошему дурной тон. Поддержка такой фичи появилась как следствие поддержки двойного наследования, когда возможно появление двух полей с одинаковым именем и разным назначением. Только из-за этого и появился механизм разрешения коллизий одинаковых имен. В .net ситуация иная. Тут нет двойного наследования. Соответственно поле с одним названием должно быть одно единственное и нести однозначный смысл. Поэтому если ты определяешь в потомке св-во с тем же именем что и в предке, ты таким образом заменяешь св-во предка по сути. Можно разве что сделать определенное поле предка вируальным.
и переопределить его в потомке. |
Автор: Rays 10.8.2010, 15:30 |
Хм.. Если я все правильно сделал, то не получается. Попробую сделать через params - но код переделывать придется + хз что в итоге получится)) |