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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сохранение переменной 
:(
    Опции темы
arkonst
Дата 2.7.2008, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте коллеги!!!

Может задаю глупый вопрос....но уже все облазил на форуме и в голове наступил ступор....Подскажите каким образом можно в одном классе использовать переменную другого класса....У меня мысли были такими...не знаю как это реализовать просто....

Есть некоторый класс в котором есть метод ...а этот метод обращаеться к методу другого класса. Тот метод к которому обращаеться первый метод , считывает данные с некоторого устройства...так вот....считывать то он считывает...а вот когда код выполняет этот метод и переходит к продолжению первого метода .В продолжении первого метода мне необходима подставить данные полученные методом к которому обращался....а данных нет...теряються...вместо необходимых значений появляються нули....что делать не знаю...???
PM MAIL   Вверх
Zakonnic
Дата 2.7.2008, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(arkonst @  2.7.2008,  11:51 Найти цитируемый пост)
Подскажите каким образом можно в одном классе использовать переменную другого класса...
Согласно принципам ООП (инкапсуляция, наследование, полиморфизм). Просто формулировка вопроса наводит на мысль, что с инкапсуляцией вы не знакомы.

Можно:
- Объявить переменную статической и получать к ней доступ через имя класса. Это лучше не делать без особой необходимости... и вообще лучше не делать. Моветон) А вот если функция считывания данных, например, умеет только получать данные и внутри класса не копается, ее можно сделать статиком. 
- создать объект - экземпляр класса (оператор new) и работать с его public-полями. Это правильный способ smile
--------------------
...и никогда не пишите в комментариях правду
PM MAIL ICQ   Вверх
arkonst
Дата 2.7.2008, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я делал так

Код

 Form1 q = new Form1();
            
            //Ensure port is open:(Проверка на открытие порта)
            if (sp.IsOpen)
            {
                
                //Clear in/out buffers:
                sp.DiscardOutBuffer();//Методы отвечают за передачу и считывание с последовательного
                sp.DiscardInBuffer(); // порта данных в буфер и из него.

                byte[] message = new byte[15];

                byte[] response = new byte[8];

                byte[] CRC = new byte[2];
                
                message[0] = address;
                message[1] = 16;
                message[2] = (byte)(start >> 8);
                message[3] = (byte)start;
                message[4] = 0;
                message[5] = 3;
                message[6] = 3;
                message[7] = 0;
                message[8] = (byte)Operating_mode;
                message[9] = q.PassMlbit();        //1;
                message[10] = q.ReadPassMl();        //40;
                message[11] = q.PassStbit();      //1;
                message[12] = q.ReadPassSt();       //6;
                GetCRC(message, ref CRC);
                message[message.Length - 2] = CRC[0];
                message[message.Length - 1] = CRC[1];



и так у меня ничего не получилось....видимо тут и был этот пресловутый моветон))
PM MAIL   Вверх
Zakonnic
Дата 2.7.2008, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код - это уже хорошо, но по этому куску не видно, что такое "sp" и функции DiscardOutBuffer и DiscardInBuffer. Интересно посмотреть на объявление переменной, куда они считывают данные (хотя судя по названию и комментарию "Clear in/out buffers" они ничего никуда не считывают). Где вы подставляете "данные полученные методом к которому обращался"? PassMlbit что ли?

Это сообщение отредактировал(а) Zakonnic - 2.7.2008, 14:49
--------------------
...и никогда не пишите в комментариях правду
PM MAIL ICQ   Вверх
arkonst
Дата 2.7.2008, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот...это тот метод к которому орщаеться
Код

 public byte ReadPassMl()
        {
            StopPoll();
            mb.SendFc4_Pass(1, 32775, 2, ref values5);
            PassMl = values5[0]; 
            return PassMl;
        }
        public byte ReadPassSt()
        {
            StopPoll();
            mb.SendFc4_Pass(1, 32775, 2, ref values5);
            PassSt = values5[1];
            return PassSt;
        }
        public byte PassMlbit()
        {
            StopPoll();
            mb.SendFc4_Pass(1, 32775, 2, ref values5);
            PassMl = values5[0]; 
            PassMl >>= 8;
            return PassMl;
        }
        public byte PassStbit()
        {
            StopPoll();
            mb.SendFc4_Pass(1, 32775, 2, ref values5);
            PassSt = values5[1];
            PassSt >>= 8;
            return PassSt;
        }

PM MAIL   Вверх
Zakonnic
Дата 2.7.2008, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вау.  smile  Это жесть.
Вас не смущает вызов функций StopPoll() и mb.SendFc4_Pass() четыре раза подряд? Я просто не знаю что они делают, но спрашивать не буду - ничего хорошего smile 
Везде использовано ref для передачи по ссылке - не уверен, что это необходимо.
Все переменные глобальные, а используются как локальные. 
Если PassSt и PassMl имеют тип byte, то сдвиг их на 8 всегда даст 0.

Вам надо читать книги по объектно-ориентированному программированию - С# на нем построен.
--------------------
...и никогда не пишите в комментариях правду
PM MAIL ICQ   Вверх
arkonst
Дата 3.7.2008, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я понимаю что код "слегка" не оптимизирован))))  Дело в том что опыта у меня мало...мне сейчас самое главное чстоб заработало...а потом уже начну лишнее удалять и укорачивать.....но вопрос то не в этом состоял.....
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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