|
2 / 2 / 0
Регистрация: 06.01.2013
Сообщений: 114
|
||||||||||||||||||||||||||||||||||||
.NET 4.x Неверная передача значений между наследуемыми классами08.02.2013, 11:48. Показов 3730. Ответов 39
Метки нет (Все метки)
Помогите. проблема появилась во время разработки. есть три класса
CalculationType_E_and_H() CalculationSizeWaveguide() PowerLoss() наследуется таким образом:
вот программа:
0
|
||||||||||||||||||||||||||||||||||||
| 08.02.2013, 11:48 | |
|
Ответы с готовыми решениями:
39
Передача между классами Передача данных между классами Передача строк между классами |
|
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
|
|
| 11.02.2013, 20:31 | |
|
0
|
|
|
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
|
|
| 11.02.2013, 20:38 | |
|
Artem1990,
Смотри
1
|
|
|
2 / 2 / 0
Регистрация: 06.01.2013
Сообщений: 114
|
|
| 11.02.2013, 22:20 [ТС] | |
|
или я где то неправильно что-то сделал?
0
|
|
|
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
|
|
| 11.02.2013, 22:31 | |
|
Вы сделали
public PowerLoss( int sigma, int m, int n, double a, double b, double l, double f, double mi): base (f, mi) Судя по ошибке Ошибка 3 "Волноводы.PowerLoss" не содержит конструктор, который принимает аргументы "8" нет
1
|
|
|
2 / 2 / 0
Регистрация: 06.01.2013
Сообщений: 114
|
||||||
| 11.02.2013, 23:25 [ТС] | ||||||
|
Да! моя ошибка, извиняюсь. Пока работает все супер.
но есть еще вопрос. но нижний метод возвращает не число
0
|
||||||
|
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
|
|
| 12.02.2013, 07:27 | |
|
Artem1990,
Скиньте код, если изменили прошлый вариант. Что нажать на форме, что бы запустить этот метод (что бы долго не изучать код) ?
0
|
|
|
2 / 2 / 0
Регистрация: 06.01.2013
Сообщений: 114
|
||||||
| 12.02.2013, 11:18 [ТС] | ||||||
|
Оказалось что в метод класса CalculationType_E_and_H
другой метод тоже не смотрел, получается что этот метод передает не число! конструктор передаются значения, а в методе нет их.
0
|
||||||
|
2 / 2 / 0
Регистрация: 06.01.2013
Сообщений: 114
|
|||||||||||
| 12.02.2013, 11:28 [ТС] | |||||||||||
|
и метод класса CalculationSizeWaveguide приходят NaN
вот оно и приходит в метод со значением Nan
0
|
|||||||||||
|
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
|
|
| 12.02.2013, 23:21 | |
|
Artem1990,
С остальными переменными та же проблема. Они не передаются в конструкторы базовых классов. Как следствие - эти переменные имеют нулевые значения в конструкторах производных классах. Я дал пример только для двух переменных. Показал принцип. Давай теперь попробуем это сделать для всех переменных. 1. Имеем класс и его конструктор public CalculationSizeWaveguide(double f, int m, int n) 2. Имеем производный от CalculationSizeWaveguide класс и конструктор CalculationType_E_and_H : CalculationSizeWaveguide public CalculationType_E_and_H(double f, int m, int n, double e, double mi, double a, double b) нужно передать в его базовый класс соответственно (f, m, n) Тогда переделаем конструктор в такой вид public CalculationType_E_and_H(double f, int m, int n, double e, double mi, double a, double b): base (f, m, n) 3. Имеем производный от CalculationType_E_and_H класс и конструктор PowerLoss : CalculationType_E_and_H public PowerLoss( int sigma, int m, int n, double a, double b, double l, double f, double mi) нужно передать в его базовый класс соответственно (f, m, n, e, mi, a, b) переменную e передать в базовый не можем, т.к. его в конструкторе для PowerLoss пока нет. Добавим эту переменную (хотя, похоже она и не нужна тебе в PowerLoss) и теперь перепишем конструктор так public PowerLoss( int sigma, int m, int n, double a, double b, double l, double f, double mi, double e) : base(f, m, n, e, mi, a, b) Теперь, нужные переменные передаются правильно в соответствующие объекты. На всякий случай, скинул измененный проект. Тестируй. Может чего упустил.
1
|
|
|
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
|
|
| 12.02.2013, 23:35 | |
|
Проверь, правильно ли передаются переменные в методы. Я не проверял
Можно вообще создать класс для хранения переменных и извлекать их по мере надобности в конструкторах (которые без параметров)
1
|
|
|
2 / 2 / 0
Регистрация: 06.01.2013
Сообщений: 114
|
|
| 13.02.2013, 09:35 [ТС] | |
|
Все работает как по маслу! Спасибо!
0
|
|
|
2 / 2 / 0
Регистрация: 06.01.2013
Сообщений: 114
|
|||||||||||
| 17.02.2013, 21:50 [ТС] | |||||||||||
|
Опять возвращаюсь к этой теме написал еще один класс который предназначен для рисования Структуры поля PaintGraphics.cs он является наследником класса CalculationType_E_and_H.cs и получает методы:
При нажатии кнопки "структура" на форме P_Volnovod происходит отображение формы GraphicsForm и отрисовка поля. Я создал конструктор в классе PaintGraphics.cs и сделал наследование и передал ему значения при нажатии кнопки!
0
|
|||||||||||
|
2 / 2 / 0
Регистрация: 06.01.2013
Сообщений: 114
|
|
| 17.02.2013, 21:53 [ТС] | |
|
Исходники
0
|
|
|
2 / 2 / 0
Регистрация: 06.01.2013
Сообщений: 114
|
|
| 18.02.2013, 21:45 [ТС] | |
|
кто нибудь дайте ответ.
0
|
|
|
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
|
||||||
| 19.02.2013, 10:41 | ||||||
|
Artem1990,
Похоже вы совсем заблудились в конструкторах ![]() 1. Смотрим class GraphicsForm : Form и там PaintGraphics RW = new PaintGraphics(); Вы запускаете конструктор PaintGraphics() без параметров. Ок. Заходим в сам класс PaintGraphics, чей конструктор запускается. Там два конструктора, с параметрами и без. С параметрами вы не запускаете (смотри выше). Получается, что все поля double f, int m, int n, double e, double mi, double a, double b будут нулевые, ведь им ничего не передалось. Следовательно из формы class GraphicsForm : Form вы должны передать данные в конструктор с параметрами так: PaintGraphics RW = new PaintGraphics( f,m,n,E,mi,a,b). Но эти переменные форма не знает. Следовательно, они там должны как то появиться. 2. Берем класс class PaintGraphics: CalculationType_E_and_H Для доступа к Ex(x, y) и Ey(x, y)вы создаете новый объект CalculationType_E_and_H WaveStruct = new CalculationType_E_and_H();. К тому же запустили конструктор без параметров, и как следствие у WaveStruct все поля будут нулевые. Зачем вообще создавать объект WaveStruct? Ведь PaintGraphics уже унаследовал методы Ex и Eу , и их можно запускать напрямую. Только полям нужно передать значения, как писал выше, а они передадутся дальше в CalculationType_E_and_H через base .
Больше не смотрел. Вам нужно понять принцип передачи данных во вновь создаваемый объект, раз уж пошли таким путем. Если метод не возвращает нужное значение, сделайте точку останова в нем. Посмотрите, чему равны переменные. Если если нулевые, а не должны, значит они не были переданы. Небыли переданы - смотрим почему. И т.д
1
|
||||||
|
2 / 2 / 0
Регистрация: 06.01.2013
Сообщений: 114
|
||||||||||||||||
| 19.02.2013, 23:11 [ТС] | ||||||||||||||||
|
Спасибо, я теперь разобрался. чтобы конструктор сработал нужно в него передать значения из того места откуда вызывается класс?! я поступил проще с создал Panel с именем на вкладке TabControl И и из его события Paint рисую. В класс PaintGraphics.cs передаются значения формулы, но что то не рисуется на
то рисуется ерунда а по идее это должна быть стрелка! просто это уже завершающий этап. половину интерната обрыскал не как не могу найти чтобы по нажатию кнопки из класса на Panel рисовал метод этого класса и почему стрелки похожи на треугольники? я вот ели разобрался с координатами, а тут это((( прилагаю скрин и прогу
0
|
||||||||||||||||
|
2 / 2 / 0
Регистрация: 06.01.2013
Сообщений: 114
|
|
| 19.02.2013, 23:15 [ТС] | |
|
Скрин получившийся при визуализации кода, вместо стрелок треугольники может как нибудь их отмаштабировать, была идея Переменные Ex и Ey умнажать на значение допустим 10. получается так что, в начале они треугольники, а к краю правому уже стрелки но возрастающие в длинне! как это осуществить по грамотному?
0
|
|
|
2 / 2 / 0
Регистрация: 06.01.2013
Сообщений: 114
|
|
| 19.02.2013, 23:18 [ТС] | |
|
0
|
|
|
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
|
|||||||||||||
| 20.02.2013, 15:24 | |||||||||||||
|
Но, немного изучив ваш случай, пришел к такому выводу: 1. Размер маркера зависит только от числа A (условно) в выражении Pen pen = new Pen(Color.Black, A); 2. Длину стрелки формирует разница координат между двумя точками. У вас она просто мизерная
Следовательно, у нас две задачи - нарисовать маркер (т.е. задать направление) и иметь такие значения, что бы был виден "хвост" стрелки. Я попробовал такой вариант
Но, меня смущает, что количество маркеров и их направления другие, чем без kX и kY. Если это верное направление мысли, может дожмете тему?
0
|
|||||||||||||
|
2 / 2 / 0
Регистрация: 06.01.2013
Сообщений: 114
|
|||||||||||
| 21.02.2013, 18:31 [ТС] | |||||||||||
|
по поводу стрелок, я У руководителя диплома спрошу, поскольку сам смутно представляю как они должны рисоваться (направление)! вот только не рисуется
вот пытаюсь осваивать и понимать что делаю, потому что потом еще и бумагу марать и описовать прогу! Программы раньше писал небольшие, а вот с GDI+ не работал. Только здесь столкнулся. Событие как я правильно понял Paint. вызвал экземпляр класса, создал ссылку на метод и перерисовал. мне кажется что-то не так здесь
закралось подозрение что это происходит из-за того что "панель" расположена в вкладке TabControl. потому что пробовал просто на форму и на панель без tabControl событие paint работает, метод рисует, а вот как щас не может от рисовать, происходит событие но не рисует
0
|
|||||||||||
| 21.02.2013, 18:31 | |
|
Передача данных между классами Передача значений между классами
Неверная передача значений серверу Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|