Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
2 / 2 / 0
Регистрация: 14.06.2012
Сообщений: 353

Чтение переменной из другого класса

22.08.2017, 17:55. Показов 3598. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет. Как сделать чтение переменной из другого класса, именно в тот момент, когда в том классе её значение изменяется?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.08.2017, 17:55
Ответы с готовыми решениями:

Чтение Settings другого класса
Есть проект, такая структура: Когда я запускаю коннект к базе из Telegramm, вызывается класс OracleConnect. В целом все работает, но...

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

Вызов переменной с другого класса
Запутался, в вызове переменной из другого класса , Как из класса Predmet, вызвать переменные Predmet1, Predmet2, Predmet3 в методе Rating...

3
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
22.08.2017, 20:47
Этот интерфейс должен реализовать какой-то класс, который будет обработчиком события.
C#
1
2
3
4
5
6
7
namespace ConsApp_Observer
{
    public interface ISomeHandler
    {
        void Handle(string text);
    }
}
Тот, кто ожидает событие
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
 
namespace ConsApp_Observer
{
    public class Subscriber : ISomeHandler
    {
        private readonly string _name;
 
        public Subscriber(string name)
        {
            _name = name;
        }
 
        public void Handle(string text)
        {
            Console.WriteLine(_name + " получил сообщение: " + text);
        }
    }
}
Тот, от кого ждут события
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
using System.Collections.Generic;
using System.Text;
 
namespace ConsApp_Observer
{
    public class Worker
    {
        private readonly List<ISomeHandler> _subscribers;
 
        public Worker(List<ISomeHandler> subscribers)
        {
            _subscribers = subscribers;
        }
 
        public void DoWork()
        {
            string message = CreateMessage();
            for (int i = 0; i < _subscribers.Count; i++)
            {
                _subscribers[i].Handle(message);
            }
        }
 
        private string CreateMessage()
        {
            byte[] bytes = { 208, 165, 209, 128, 209, 142, 209, 142, 209, 142, 33 };
            return Encoding.UTF8.GetString(bytes);
        }
    }
}
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
 
namespace ConsApp_Observer
{
    internal class Program
    {
        #region Entry point
 
        private static Program _program;
 
        private static void Main(string[] args)
        {
            _program = new Program();
            _program.Run(args);
        }
 
        #endregion
 
        private void Run(string[] args)
        {
            var subscribers = new List<ISomeHandler>
            {
                new Subscriber("Кот Борис"),
                new Subscriber("Свин - брат рабочего")
            };
 
            var worker = new Worker(subscribers);
            Console.WriteLine("Рабочий печатает сообщение. Ждём.");
 
            Task.Factory.StartNew(() =>
            {
                Console.WriteLine();
                for (int i = 0; i < 6; i++)
                {
                    Console.Write("клац ");
                    Thread.Sleep(250);
                }
                Console.WriteLine();
 
            }).ContinueWith((task) =>
            {
                worker.DoWork();
            });
 
            Console.ReadKey();
        }
    }
}
Добавлено через 8 минут
--------------------------------------------------------------------------------------------
Вариант второй:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System;
 
namespace ConsApp_Observer
{
    public class WorkerMessageEventArgs : EventArgs
    {
        public WorkerMessageEventArgs(string text)
        {
            Text = text;
        }
 
        public string Text { get; private set; }
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
 
namespace ConsApp_Observer
{
    public class Subscriber
    {
        private readonly string _name;
 
        public Subscriber(string name)
        {
            _name = name;
        }
 
        public void Handle(object sender, WorkerMessageEventArgs args)
        {
            Console.WriteLine(_name + " получил сообщение: " + args.Text);
        }
    }
}
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
using System;
using System.Text;
 
namespace ConsApp_Observer
{
    public class Worker
    {
        public event EventHandler<WorkerMessageEventArgs> WroteMessage;
 
        public void DoWork()
        {
            string message = CreateMessage();
            OnWroteMessage(new WorkerMessageEventArgs(message));
        }
 
        private string CreateMessage()
        {
            byte[] bytes = { 208, 165, 209, 128, 209, 142, 209, 142, 209, 142, 33 };
            return Encoding.UTF8.GetString(bytes);
        }
        
        private void OnWroteMessage(WorkerMessageEventArgs e)
        {
            WroteMessage?.Invoke(this, e);
        }
    }
}
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
 
namespace ConsApp_Observer
{
    internal class Program
    {
        #region Entry point
 
        private static Program _program;
 
        private static void Main(string[] args)
        {
            _program = new Program();
            _program.Run(args);
        }
 
        #endregion
 
        private void Run(string[] args)
        {
            var subscribers = new List<Subscriber>
            {
                new Subscriber("Кот Борис"),
                new Subscriber("Свин - брат рабочего")
            };
 
            var worker = new Worker();
            foreach (Subscriber subscriber in subscribers)
            {
                worker.WroteMessage += new EventHandler<WorkerMessageEventArgs>(subscriber.Handle);
            }
 
            Console.WriteLine("Рабочий печатает сообщение. Ждём.");
 
            Task.Factory.StartNew(() =>
            {
                Console.WriteLine();
                for (int i = 0; i < 6; i++)
                {
                    Console.Write("клац ");
                    Thread.Sleep(250);
                }
                Console.WriteLine();
 
            }).ContinueWith((task) =>
            {
                worker.DoWork();
            });
 
            Console.ReadKey();
        }
    }
}
Добавлено через 4 минуты
Кстати, в object sender будет ссылка на объект, который иниицировал событие, то есть можешь привести к нужному типу и получив ссылку на этот объект читать что нужно. Вообще тут вариантов "миллион", можно сделать уймой способов, правда почти все будут примерно похожи. Имею ввиду, что конкретная реализация зависит от задачи.
0
2 / 2 / 0
Регистрация: 14.06.2012
Сообщений: 353
22.08.2017, 21:38  [ТС]
Casper-SC, всё бы ничего, да только у меня класс с переменной, которую я отслеживаю, статический.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
22.08.2017, 22:04
Цитата Сообщение от Semael Посмотреть сообщение
да только у меня класс с переменной, которую я отслеживаю, статический
Какая разница?
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
    class Test
    {
        public static event Action<int> OnValueChanged;
 
        private static int _var;
 
        public static int Variable
        {
            get
            {
                return _var;
            }
            set
            {
                if (_var != value)
                {
                    _var = value;
                    OnValueChanged?.Invoke(_var);
                }
            }
        }
    }
 
    class Test2
    {
        public Test2()
        {
            Test.OnValueChanged += ValueUpdated;
        }
 
        private void ValueUpdated(int val)
        {
            Console.WriteLine(val);
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
    static class Program
    {
        static void Main()
        {
            Test2 t2 = new Test2();
 
            while (true)
            {
                Test.Variable++;
                Thread.Sleep(1000);
            }
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.08.2017, 22:04
Помогаю со студенческими работами здесь

Использование переменной другого класса
public class one { string lab = &quot;123&quot;; } public class two { public static void go() { ...

Доступ к переменной из другого класса
Подскадите есть переменная Name которая находится в Program.cs Как делать чтобы ее можно было увидеть в Program123.cs

Вызов переменной из другого класса
class A{ public int size = 4; } class B{ //Здесь я хочу использовать переменную с класса A } Чтобы использовать переменную с...

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

Обратиться к глобальной переменной из другого класса
Добрый день! У меня объявлена глобальная переменная в классе public partial class Form1 : Form. Также в этом же namespace есть класс...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru