Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> переопредедение переменной в классе 
V
    Опции темы
Rays
Дата 9.8.2010, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 21.2.2009

Репутация: нет
Всего: нет



Доброго времени суток!
Помогите разобратся с проблемой: 
Имеется класс "1", в котором объявляется переменная "x" и дальше используется в методе этого класса. Есть класс "2", производный от класса "1", в котором тоже объявляется переменная "х", которая тоже должна использоваться в методе класса "1". Но, т.к. в классе "1" уже есть переменная "х" - она ее переопределяет. Подскажите, как сделать так, что бы переменная "х" класса "2" оставалась?

Вот что пишет студия:
2.х скрывает наследуемый член 1.х. Если предполагается скрытие, используете ключевое слово new. 

Эм.. куда его использовать?)) Я пробовал - не помогает, все-равно переопределяет значение переменной.
PM MAIL   Вверх
azesmcar
Дата 9.8.2010, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



Цитата(Rays @  9.8.2010,  19:40 Найти цитируемый пост)
Есть класс "2", производный от класса "1", в котором тоже объявляется переменная "х", которая тоже должна использоваться в методе класса "1". 

Чего? Откуда метод класса 1 знает о переменной, объявленной в наследнике этого класса?

а код ты из принципиальных соображений не показываешь, чтобы задачу усложнить?
PM   Вверх
Rays
Дата 9.8.2010, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 21.2.2009

Репутация: нет
Всего: нет



Цитата(azesmcar @  9.8.2010,  19:46 Найти цитируемый пост)
Чего? Откуда метод класса 1 знает о переменной, объявленной в наследнике этого класса?

Хм.. т.е. так нельзя сделать?)) Ну ладно, плохо...)
Вот код, но думаю, он уже не нужен:
Код

class main_helm_desert
    {   int Str, Dex, Int_n, Sta, Acc, Int_t; 
        bool Check1;
        protected int str_take = 35, dex_take=0, int_n_take = 40, sta_take=0, acc_take = 26, int_t_take = 15 ;
        protected int str_give = 0, dex_give = -4, int_n_give = 10, sta_give = 0, acc_give = 10, int_t_give = 7;
       
        public void check (int str, int dex, int int_n, int sta, int acc, int int_t)
        {
            if (str >= str_take & dex >= dex_take & int_n >= int_n_take & sta >= sta_take & acc >= acc_take & int_t >= int_t_take)
            {
                Str = str + str_give;
                Dex = dex + dex_give;
                Int_n = int_n + int_n_give;
                Sta = sta + sta_give;
                Acc = acc + acc_give;
                Int_t = int_t + int_t_give;
                Check1 = true;
            }
            else
                Check1=false;
        }
        public int renew_str()
        {
            return Str;
        }
        public int renew_dex()
        {
            return Dex;
        }
        public int renew_int_n()
        {
            return Int_n;
        }
        public int renew_sta()
        {
            return Sta;
        }
        public int renew_acc()
        {
            return Acc;
        }
        public int renew_int_t()
        {
            return Int_t;
        }
        public bool renew()
        {
            return Check1;
        }

    }

    class armor_desert : main_helm_desert
    {
        int str_take = 45, dex_take = 45, int_n_take = 0, sta_take = 60, acc_take = 0, int_t_take = 0;
        int str_give = 7, dex_give = -5, int_n_give = 0, sta_give = 1, acc_give = 9, int_t_give = 0;
    }

Смысл в том, что бы подставлять разные значения перпеменных в один и тот же метод.
PM MAIL   Вверх
azesmcar
Дата 9.8.2010, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



Цитата(Rays @  9.8.2010,  19:55 Найти цитируемый пост)
Хм.. т.е. так нельзя сделать?)) Ну ладно, плохо...)

А откуда базовому классу знать о своих потомках?

Цитата(Rays @  9.8.2010,  19:55 Найти цитируемый пост)
Смысл в том, что бы подставлять разные значения перпеменных в один и тот же метод. 

хм..я чего-то не понимаю? чем передача параметров не устраивает?
PM   Вверх
mrbrooks
Дата 10.8.2010, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 7
Всего: 306



Цитата(azesmcar @  9.8.2010,  21:19 Найти цитируемый пост)
хм..я чего-то не понимаю?

может он имеет ввиду разные типы данных?
PM MAIL   Вверх
azesmcar
Дата 10.8.2010, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



Цитата(mrbrooks @  10.8.2010,  07:56 Найти цитируемый пост)
может он имеет ввиду разные типы данных? 

может быть smile 

откровенно говоря код я не осилил, но тогда ему нужно не наследование а generic.
PM   Вверх
mrbrooks
Дата 10.8.2010, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 7
Всего: 306



так или иначе - но в таких темах нужен мелафон  smile 
PM MAIL   Вверх
ДобренькийПапаша
Дата 10.8.2010, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Цитата(azesmcar @  10.8.2010,  08:00 Найти цитируемый пост)
откровенно говоря код я не осилил, но тогда ему нужно не наследование а generic. 


Ещё бы, когда видишь такой код на С++ это нормально, но когда видишь такой код под .NET это вызывает удивление, поскольку человек не читает спецификацию и не в курсе, что благодаря Intellisense основанному на работе с метаданными можно давать нормальные имена переменным и не стесняться их делать длинными (и понятными)  smile 


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
azesmcar
Дата 10.8.2010, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



Цитата(ДобренькийПапаша @  10.8.2010,  10:54 Найти цитируемый пост)
Ещё бы, когда видишь такой код на С++ это нормально

Это ненормально на любом языке..ну может разве что на branfuck-e?!
PM   Вверх
Amp
Дата 10.8.2010, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: нет
Всего: 17



Цитата(azesmcar @  10.8.2010,  11:00 Найти цитируемый пост)
Это ненормально на любом языке..ну может разве что на branfuck-e?! 

Мне кажется, что для реализации математических алгоритмов это нормально. Есть набор формул в литературе с устоявшимися специфическими короткими именами переменных (которые даже могут не нести никакой смысловой нагрузки, например имена каких-либо коэффициентов - a, b, c) - почему бы не перенести это в код? Другой человек, имея соответствующую подготовку, достаточно быстро вникнет в такой код, быстро соотнеся его с изложенными формулами в статьях. 
PM MAIL   Вверх
Mephisto
Дата 10.8.2010, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 2
Всего: 34



Цитата(ДобренькийПапаша @  10.8.2010,  11:54 Найти цитируемый пост)
Ещё бы, когда видишь такой код на С++ это нормально, но когда видишь такой код под .NET это вызывает удивление, поскольку человек не читает спецификацию и не в курсе, что благодаря Intellisense основанному на работе с метаданными можно давать нормальные имена переменным и не стесняться их делать длинными (и понятными)

брррр. Причем тут спецификация .NET и Intellisense? Одно дело платформа, другое приблуда к студии MS. Под .NET пожно писать и на шарпдевелопе и на монодевелопе, да и в любом блокноте, даже в консольном. Никаких Intellisense'ов там не будет. В других студиях другие средства заменяющие его, иногда даже лучше.

А еще мне не понятно почему в С++ нельзя, дословно
Цитата(ДобренькийПапаша)

давать нормальные имена переменным и не стесняться их делать длинными (и понятными)

И Intellisense тут ни при чем. Я пользуюсь KDevelop. Начиная с версии 4 у него навигация и автопостроение документации ИМХО на голову выше при работе с С++.
Очень сильно напоминает работу в студии с установленным ReSharper. Кто использует, тот понимает.
Цитата(Rays @  9.8.2010,  20:40 Найти цитируемый пост)
Я пробовал - не помогает, все-равно переопределяет значение переменной. 

Это нормально. Два поля с одинаковым названием не бывает в нете.
Да и в плюсах это по хорошему дурной тон. Поддержка такой фичи появилась как следствие поддержки двойного наследования, когда возможно появление двух полей с одинаковым именем и разным назначением. Только из-за этого и появился механизм разрешения коллизий одинаковых имен.
В .net ситуация иная. Тут нет двойного наследования. Соответственно поле с одним названием должно быть одно единственное и нести однозначный смысл. Поэтому если ты определяешь в потомке св-во с тем же именем что и в предке, ты таким образом заменяешь св-во предка по сути.

Можно разве что сделать определенное поле предка вируальным.
Код

protected virtual int SomeProperty { get; set; }

и переопределить его в потомке.
PM   Вверх
Rays
Дата 10.8.2010, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 21.2.2009

Репутация: нет
Всего: нет



Цитата(Mephisto @  10.8.2010,  12:52 Найти цитируемый пост)
Можно разве что сделать определенное поле предка вируальным.

Хм.. Если я все правильно сделал, то не получается. 
Попробую сделать через params - но код переделывать придется + хз что в итоге получится))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0818 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.