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

Передача объекта класса в другой класс

22.07.2021, 10:15. Показов 5052. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Есть класс, который реализует обработку объекта другого класса.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class A
{
   MethodA()
   {
      //some logic
      MethodB();
   }
   MethodB()
   {
      //some logic
      MethodC();
   }
   MethodC()
   {
      //some logic
      Сhange(class_B_object);
   }
   Сhange(ClassB my_object)
   {
      //some logic with my_object
   }
}
Т.е. есть цепочка вызовов методов, в одном их последних, когда уже все готово, нужно изменить объект другого класса. Я вижу два возможных решения этой проблемы:
1. Создать глобальную переменную-член класса А, в которую записывать объект класса B и потом с ним работать.
2. Передавать объект класса B в качестве параметра последовательно в каждый метод класса А для того, чтобы он в конце концов оказался в методе Сhange().
Мне кажется, что оба способа неверны и налицо ошибка проектирования. Подскажите, как сделать правильно, или что читать, для того, чтобы сделать правильно. Спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.07.2021, 10:15
Ответы с готовыми решениями:

Передача объекта формы в другой класс
Доброго времени суток, уже 4 или 5 день бьюсь с данной проблемой. У меня есть 2 класса, первый хранит данные о вкладчиках: их ФИО, счет и...

Передача объекта однго класса в другой класс
Имеется класс Main в котором имеется класс PortReader с обработчиком события serialEvent по приему данных из COM порта Данные появляются...

Передача объекта класса в другой класс и обращение к этому объекту. (Потоки)
Привет, есть 3 класса. 1) Основой класс (форма) 2) Класс потоковый A. 3) Класс потоковый B. Мне нужно запустить из Основного...

5
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
22.07.2021, 21:29
Цитата Сообщение от Vanka03 Посмотреть сообщение
Мне кажется, что оба способа неверны и налицо ошибка проектирования
Почему? Чем вам не нравятся вами же предложенные оба варианта? Вот тут можете почитать.
https://metanit.com/sharp/patterns/1.2.php
1
 Аватар для lovember
152 / 100 / 40
Регистрация: 14.10.2016
Сообщений: 379
23.07.2021, 01:55
Цитата Сообщение от Vanka03 Посмотреть сообщение
1. Создать глобальную переменную-член класса А, в которую записывать объект класса B и потом с ним работать.
На мой взгляд этот вариант подходит лучше, чем второй. Тогда обращаться к объекту класса B придётся только в методе Change и не пробрасывать его через все остальные методы.
А то, что в классе А есть поле, тип которого "класс_В", - вполне нормально. И обращаться к нему удобнее.

Добавлено через 8 минут
А ещё лучше, чтобы метод Change, изменяющий объект_В, был в классе_В.
Логично, если любые изменения объектов определённого класса делают только методы этого класса. Вызываться, конечно, эти методы могут и из других классов.
1
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3439 / 2759 / 575
Регистрация: 04.09.2018
Сообщений: 8,685
Записей в блоге: 3
23.07.2021, 08:21
Цитата Сообщение от lovember Посмотреть сообщение
А ещё лучше, чтобы метод Change, изменяющий объект_В, был в классе_В.
Логично, если любые изменения объектов определённого класса делают только методы этого класса. Вызываться, конечно, эти методы могут и из других классов.
Это естественный подход. Изменять объект класса в другом классе - как-то не ООП-шно.
1
4 / 4 / 0
Регистрация: 01.11.2013
Сообщений: 216
28.07.2021, 09:41  [ТС]
Спасибо большое всем ответившим!
0
 Аватар для kernel_mode
70 / 47 / 16
Регистрация: 21.07.2021
Сообщений: 187
28.07.2021, 11:44
В этом решении нет ошибки. Если речь идет про оптимальное использование ресурсов стоит работаться с тем - создавать ли переменную, как глобальную, либо действительно лучше использовать, как аргумент функции.
Если переменная используется один раз (в рамках функции), то лучше использовать, как аргумент.
Если данный экземпляр класса несколько раз - существуют методы, аргументы которых зависят от прошлых вызовов, то стоит использовать, как глобальную переменную в классе.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.07.2021, 11:44
Помогаю со студенческими работами здесь

Передача объекта из одного экземпляра класса в другой с запретом обращаться к методам и свойствам этого объекта
Всем привет! Есть класс, в котором используется объект (MyObject, объявленный в private). При создании второго экземпляра этого класса...

Передача объекта в другой класс
У меня есть один класс Main import javax.swing.*; public class Main { public static void main(String args) { try ...

Робота с классами (передача объекта класса в другой)
Только начал изучать классы в С++. Подскажите, почему на моменте MyText.AddStr(One.name, 1) программа выдает ошибку. Я пытаюсь имя One.name...

Передача значений массива объекта в другой класс
В данном классе происходит наполнение массива объекта Vagon public static void main(String args) { int count; ...

Не работает передача объекта из одного класса в другой через return
Есть 2 объекта класс Reading ,text и line,которые посредством методов std::string outstr() std::string outch() соответственно должны...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru