|
2 / 2 / 3
Регистрация: 13.12.2015
Сообщений: 49
|
||||||
Организация событий между классами04.01.2017, 12:23. Показов 6936. Ответов 41
Метки нет (Все метки)
Есть класс записи в файл, писать необходимо из экземпляров _a, _b, но из этих экземпляров нет доступа к
экземпляру log3, приходиться создавать в каждом классе свои экземпляры log1 и log2 - что не есть правильно мне так кажется, как правильно все таки сделать посоветуйте пожалуйста?
0
|
||||||
| 04.01.2017, 12:23 | |
|
Ответы с готовыми решениями:
41
Отношения между классами Связи между классами Передача между классами |
|
|
|
| 04.01.2017, 14:16 | |
|
1
|
|
|
.NET C#,ASP.NET MVC
594 / 507 / 224
Регистрация: 16.10.2010
Сообщений: 1,902
|
||
| 04.01.2017, 15:45 | ||
|
1
|
||
|
2 / 2 / 3
Регистрация: 13.12.2015
Сообщений: 49
|
|
| 04.01.2017, 21:51 [ТС] | |
|
Вопрос не связан с логированнием, класс логирования - взят для примера.
Класс LOG не статический. Вопрос именно по событиям и их организации. Все таки можно обойтись без статического класса?
0
|
|
|
.NET C#,ASP.NET MVC
594 / 507 / 224
Регистрация: 16.10.2010
Сообщений: 1,902
|
||||||
| 04.01.2017, 22:22 | ||||||
|
dav1977, обьясните подробнее задачу, тогда найдем оптимальный вариант. Если вам нужен определенный общий код - тогда да, лучше вынести в статический касс, так удобнее, можно еще использовать паттерн синглтон.
0
|
||||||
|
2 / 2 / 3
Регистрация: 13.12.2015
Сообщений: 49
|
|
| 04.01.2017, 22:59 [ТС] | |
|
задача научиться использовать события(event), для передачи данных между не статическими классами.
ведь для этого события и предназначены, что бы не было статических классов для общих данных( принципы ООП.) (так называемых классов "помоек" где собранны все данные из разных классов)
0
|
|
|
|
||
| 04.01.2017, 23:17 | ||
|
К примеру, нужен какой-либо служебный метод, для выполнения задачи. А поскольку методы в C# без классов существовать не могут, он выносится в отдельный (статический) класс. Сам класс нам не важен, и нам не нужно создавать из него объекты - нам нужен просто метод. Вот тут и нужны статические классы/методы. С другой стороны, у нас есть тип, и каждый из созданных из него объектов может обладать определенным состоянием (отличным от других того же типа). Тут нужны, естественно, обычные классы, с возможностью создания объектов. Наглядный пример - служебный класс System.Math. Нам не нужные его объекты, нужен просто функционал.И в отличие от него, возьмем такой класс как FileInfo, например. Они все одного типа, но каждый хранит информацию о разных файлах (у всех разное состояние), поэтому смысла делать его статическим нет.
0
|
||
|
2 / 2 / 3
Регистрация: 13.12.2015
Сообщений: 49
|
|
| 04.01.2017, 23:26 [ТС] | |
|
не понимаю почему крайности? в С# есть event события если знаете как ими пользоваться, так ответьте пожалуйста, пример который я привел с логированием не имеет смысла делать через event.т.к проще сделать через статический класс,
но лучше сделать без статического класса, вот я и спрашиваю это МОЖНО сделать лучше чем я сделал или вы не можете придумать лучшее решение через event! ?
0
|
|
|
.NET C#,ASP.NET MVC
594 / 507 / 224
Регистрация: 16.10.2010
Сообщений: 1,902
|
||||||
| 04.01.2017, 23:40 | ||||||
|
dav1977, вот пример использования событий
0
|
||||||
|
2 / 2 / 3
Регистрация: 13.12.2015
Сообщений: 49
|
|
| 04.01.2017, 23:53 [ТС] | |
|
спасибо вот это ближе к теме.. вызов события OnSomthingChanged?.Invoke(a); а зачем Invoke и вопрос- это опечатка?
0
|
|
|
.NET C#,ASP.NET MVC
594 / 507 / 224
Регистрация: 16.10.2010
Сообщений: 1,902
|
|||||||||||
| 04.01.2017, 23:57 | |||||||||||
|
dav1977, Invoke непосредственно вызывает функцию
конструкция
Знак вопроса - это оператор языка
2
|
|||||||||||
|
2 / 2 / 3
Регистрация: 13.12.2015
Сообщений: 49
|
|
| 05.01.2017, 11:19 [ТС] | |
|
Проанализировал, не совсем подходит ваша конструкция.
UserClass - основной класс(аналог моего LOGGING) создает экземпляр HostClass а если HostClass будет много HostClass1 HostClass2 и т.д. можно сделать так что бы UserClass не создавал экземпляры? а подписаться на событие из HostClass1 HostClass2 и т.д. экземпляры которых создаст другой класс MAIN например UserClass должен быть в единственном экземпляре(он пишет файл) а множество других должны вызывать метод в UserClass(типа save_to_file) ЧЕРЕЗ event! Добавлено через 2 часа 38 минут Наверно задача не выполнимая в рамках C# - event не может быть видимым всеми классами одновременно. Как же тогда передавать данные между закрытыми классами? остается делать статический класс "помойку"
0
|
|
|
.NET C#,ASP.NET MVC
594 / 507 / 224
Регистрация: 16.10.2010
Сообщений: 1,902
|
||||||
| 05.01.2017, 12:41 | ||||||
|
dav1977, любая задача выполнима, если ее правильно сформулировать.
C# так же поддерживает статические евенты
0
|
||||||
|
2 / 2 / 3
Регистрация: 13.12.2015
Сообщений: 49
|
||||||||||||||||
| 05.01.2017, 15:07 [ТС] | ||||||||||||||||
|
Спасибо то что надо, не знал про это
переписал более понятно
неправильно переписал, вот так только event опять не доступен
0
|
||||||||||||||||
|
.NET C#,ASP.NET MVC
594 / 507 / 224
Регистрация: 16.10.2010
Сообщений: 1,902
|
||||||
| 05.01.2017, 15:58 | ||||||
|
dav1977, вам стоит для начала изучить язык, а затем делать определенные выводы. Евенты предназначены для того чтобы оповещать ДРУГИЕ обьекты об их вызове. Вы не можете на прямую вызывать евен из другой области видимости, только подписаться на событие.
но вы вполне можете написать статическую функцию для вызова статического евента
0
|
||||||
|
2 / 2 / 3
Регистрация: 13.12.2015
Сообщений: 49
|
|
| 05.01.2017, 18:07 [ТС] | |
|
Все правильно я пытаюсь изучить event, получается каша в голове.
Зачем они нужны не понятно. Всегда можно вызвать метод, а не event. Они нужны для внешних библиотек, где не известен подписчик, а в одном проекте делать event получается не имеет смысла. пример с логированием, без статического класса не сделать. Задача все таки не выполнимая? Добавлено через 1 час 53 минуты Сформулирую итог: принцип events: один объект -> ко многим, а у задачи логгирования другой принцип: множество объектов -> к одному поэтому эту задачу не решить с помощью events. Как решить задачу передачи данных из множества классов в один не статический класс?
0
|
|
|
102 / 106 / 62
Регистрация: 19.11.2015
Сообщений: 380
|
|
| 05.01.2017, 18:16 | |
|
Паттерн Singleton разве не решает проблему возможности обратиться к классу из любой точки программы?
0
|
|
|
2 / 2 / 3
Регистрация: 13.12.2015
Сообщений: 49
|
|
| 05.01.2017, 18:19 [ТС] | |
|
наверно надо через очередь
Добавлено через 2 минуты Singleton это ведь статический класс?
0
|
|
|
102 / 106 / 62
Регистрация: 19.11.2015
Сообщений: 380
|
||||||
| 05.01.2017, 18:29 | ||||||
|
Singleton - это не статический класс.
Singleton - гарантирует, что будет создан один экземпляр этого класса и то, только при первом вызове Instance.Последующие обращение будут ссылаться на один и тот же экземпляр.Вот потокобезопасный( Lazy ) шаблон для паттерна Singleton:
Singleton не предоставляет никаких других способов получения экземпляра, кроме статического свойства - а свойство написано так, что двух разных экземпляров никогда не отдаст
1
|
||||||
|
2 / 2 / 3
Регистрация: 13.12.2015
Сообщений: 49
|
|
| 05.01.2017, 19:00 [ТС] | |
|
Singleton получается возвращает только свойство, а как передать данные в Singleton и чтобы он их записал в файл, это возможно сделать?
Добавлено через 22 минуты условно все равно он статический, что не есть хорошо
0
|
|
| 05.01.2017, 19:00 | |
|
Помогаю со студенческими работами здесь
20
Обмен данными между классами Передача данных между классами Передача строк между классами Ссылка на обьект между классами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|