Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/35: Рейтинг темы: голосов - 35, средняя оценка - 4.94
7 / 7 / 1
Регистрация: 16.01.2012
Сообщений: 95

Передача переменной по ссылке в другой класс

12.04.2012, 15:16. Показов 7099. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Собственно сабж.
Имеем первый класс
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class Tmp1
{
public int i=10;
public static Tmp2 Tmp;
..... 
         public Tmp1()
           {
             Tmp = new Tmp2(ref int i);
           }
.....
         public void SomeFun()
          {
             i = 20;         
          } 
}
второй класс
 
public class Tmp2
{
public  int j = 1;  
public  int l = 0;
 
       public Tmp2(ref int k)
        {
          j = k; // j =  10;
          .....
        }
   .... 
   public void THRead()
    {
      while(true)
        {
          .....
         l = j; // l = 10;
        }
    }
}
Собственно вопрос:
Если в первом классе Tmp1 выполнить функцию Fun, то во втором классе Tmp2 значение переменных l и j не измениться (THRead бесконечно выполняющиеся нитка).
В чем косяк?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.04.2012, 15:16
Ответы с готовыми решениями:

Передача переменной в другой класс
Привет всем. Извиняюсь если повтор, но похожей темы не нашел. Подскажите пожалуйста как передать значение переменной QString из одного...

Передача значения переменной Activity в другой класс
Есть активность: public class Menu extends Activity { OnClickListener lt; EditText Day, Month, Year, BirthDay, BirthMonth,...

Передача переменной по ссылке
До меня не доходит, где ошибка. Пробовал разные варианты. GET точно не пустой. Строчкой выше в коде echo выводит его значение. Но по ссылке...

8
 Аватар для gitarillo
755 / 554 / 48
Регистрация: 17.06.2010
Сообщений: 1,041
Записей в блоге: 1
12.04.2012, 16:23
Цитата Сообщение от DeGroup Посмотреть сообщение
Если в первом классе Tmp1 выполнить функцию Fun
Ты имеешь ввиду SomeFun?
Если да, то с чего вдруг она вообще что-то менять будет.
Пример, чтобы понять что значит передача аргумента по ссылке и как происходит модификация.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int b = 400;
            Fun(ref b);
            Console.WriteLine(b);
            Console.Read();
 
        }
 
 
        private static void Fun(ref int i)
        {
            i = 25;
        }
 
 
    }
1
7 / 7 / 1
Регистрация: 16.01.2012
Сообщений: 95
12.04.2012, 18:43  [ТС]
Да это я понял, просто ситуация такая:
Первый класс Tmp1 - это форма с кнопками
Второй класс Tmp2 - это отдельный класс с нитками в котором обрабатываются данные, передаются по сети и т.п.
Так вот, при нажатии кнопки на форме изменяется какая то переменная, которая по ссылке передается во второй класс. Так вот во втором классе она не изменяется.
Способ типа Tmp1.i во втором классе нежелателен.
Просто я не понял, если ссылка это адрес переменной, то и i в первом классе и j во втором ссылаются на одну и туже ячейку памяти, следовательно изменение переменной j -> изменяет i (да это так), а вот изменение i не изменяет переменную j во втором классе. вот в чем вопрос.
0
 Аватар для gitarillo
755 / 554 / 48
Регистрация: 17.06.2010
Сообщений: 1,041
Записей в блоге: 1
12.04.2012, 21:32
Цитата Сообщение от DeGroup Посмотреть сообщение
то и i в первом классе и j во втором ссылаются на одну и туже ячейку памяти
Нет. Это не так. j у тебя как объявлена во втором классе? Она уже имеет свою ячейку памяти
C#
1
public  int j = 1;
Вот это выделение.
А это просто присвоение значение переменной j тем, что находится по адресу переменной k:
C#
1
2
3
4
5
public Tmp2(ref int k)
        {
          j = k; // j =  10;
          .....
        }
0
7 / 7 / 1
Регистрация: 16.01.2012
Сообщений: 95
12.04.2012, 22:32  [ТС]
Хм, понял. А как сделать? и можно ли создать переменную, типа как в с++ *j и передать ей адрес i?

Добавлено через 4 минуты
я думал что ref - аналог *, а out - аналог &

Добавлено через 2 минуты
Просто хотелось, чтобы изменение переменной в любом из классов, было видно в других классах.

Добавлено через 2 минуты
без прямого обращения типа Tmp.i, т.к. в классах есть делегаты кулбак функции, а они static, вот и извращаюсь

Добавлено через 1 минуту
люблю трудности
0
 Аватар для gitarillo
755 / 554 / 48
Регистрация: 17.06.2010
Сообщений: 1,041
Записей в блоге: 1
13.04.2012, 08:30
Цитата Сообщение от DeGroup Посмотреть сообщение
и можно ли создать переменную, типа как в с++ *j и передать ей адрес i?
Переменную типа указатель можно создать. Но твою проблему это не решит. Тоже самое, при инициализации переменной ты будешь просто разименовывать его, получая значение на текущий момент в ячейке.
0
35 / 35 / 11
Регистрация: 25.05.2010
Сообщений: 211
13.04.2012, 21:55
может во 2 классе добавить свойство для j и в somefunc вызывать его??
да ето не прикольно ,но решает твою задачу
0
9 / 9 / 3
Регистрация: 08.07.2010
Сообщений: 70
13.04.2012, 23:03
Лучше использовать события для передачи информации между классами.
0
 Аватар для gitarillo
755 / 554 / 48
Регистрация: 17.06.2010
Сообщений: 1,041
Записей в блоге: 1
14.04.2012, 09:47
Цитата Сообщение от ai.xss.ru Посмотреть сообщение
Лучше использовать события для передачи информации между классами.
вот оно. то что нужно. создай событие которое будет отслеживать изменение переменной.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.04.2012, 09:47
Помогаю со студенческими работами здесь

Передача переменной по ссылке
Добрый день. У меня имеется неограниченное число ссылок (1,2,3,4), в зависимости от того на какую ссылку нажмет человек мне необходимо...

Передача переменной по ссылке
Отправляю переменную при нажатии на ссылку следующим образом: <a href="http://localhost/index.php?z=6">Ссылка</a> все...

Передача значения переменной по ссылке
Есть событие, которое происходит в методе someMethod, при выполнении которого программа вылетает. Методу someMethod нужно получить...

Передача значения переменной одной формы в описание переменной другой
Всем привет. Не могу найти решение проблемы. На первой форме имеется глобальная переменная kol, которая содержит в себе число. на второй...

Передача параметров по ссылке в класс
Помогите пожалуйста проблемой: нужно передать в класс некой формы по ссылке имя сервера и базы данных, чтоб после закрытия этой модальной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru