Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 06.09.2016
Сообщений: 6

Как реализовать без нарушения инкапсуляции?

22.10.2016, 15:50. Показов 1020. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Это код из Form1.cs
Ошибка в этой строке (foreach (Seat seat in Seat.seat) // Поиск выбранного в ComboBox места в общем списке мест)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void button4Connect_Click(object sender, EventArgs e)
        {
            // Проверка заполненности форм
            if ((comboBox2Hall.Text == "") || (comboBox3HallSeat.Text == ""))
            {
                MessageBox.Show("Проверьте заполненность всех форм.", "Ошибка ☹");
                return;
            }
 
            foreach (Seat seat in Seat.seat) // Поиск выбранного в ComboBox места в общем списке мест
            {
                if (seat.name == comboBox2Hall.Text) // Если название совпало...
                    foreach (Hall hall in Hall.hall) // Поиск выбранного зала в общем списке залов
                    {
                        if (hall.name == comboBox3HallSeat.Text) // Если название совпало...
                        {
                            seat.AddHall(hall); // Добавить зал в список залов, привязанных к кинотеатру
 
                            // Добавление места к залу в TreeView
                            treeView1result.Nodes[hall.GetCinema().name].Nodes[hall.name].Nodes.Add(seat.name);
                        }
                    }
            }
Это код из Seat.cs
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
class Seat
    {
        public Seat(string _name) // Конструктор
        {
            name = _name; // Задать имя
            seat.Add(this); // Добавить в общий список мест
        }
 
        public string name { get; }
 
        List<Hall> hall = new List<Hall>(); // Список залов, к которым привязаны места
 
        public void AddHall(Hall _hall) // Привязать место к залу
        {
            if (_hall != null)
                hall.Add(_hall);
        }
 
        public List<Hall> GetHall() // Получить список
        {
            return hall;
        }
 
        static private List<Seat> seat = new List<Seat>(); // Общий список мест
        
    }
private на public менять нельзя, потому что это нарушение инкапсуляции и препод не принимает лабу с нарушением инкапсуляции
Подскажите как можно исправить.
Если поменять private на public, то все работает.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.10.2016, 15:50
Ответы с готовыми решениями:

Как обрезать изображения в CSS без нарушения пропорций?
Товарищи! Есть Div. В нем есть картинка произвольного размера (горизонтальная или вертикальная). Задача средствами CSS показать...

Как правильно сверстать эфект появления невидимого блока без нарушения текущего расположения остальных
Добрый день. Хотелось бы узнать, может кто то сталкивался с подобным, а то пока столько не пробую у самого не выходит а похожего решения...

Использование eax без нарушения ax
можно как-нибудь использовать eax часть без нарушения ax

5
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
22.10.2016, 16:02
https://msdn.microsoft.com/ru-... 6t2tx.aspx
0
0 / 0 / 0
Регистрация: 06.09.2016
Сообщений: 6
22.10.2016, 16:07  [ТС]
это не работает
Если вы уверены, что работает, то напишите, пожалуйста, как работает у вас
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
22.10.2016, 19:32
EnotBoris, Мне кажется у вас инкапсуляция это не единственная и не главная проблема.
Почему у вас холлы внутри мест? Почему список мест - статический? Да еще и private. А кому он нужен приватный то?
В общем, вам нужно разработать 4 класса:
Seat, Seats, Holl, Holls. И подумайте как эти классы связаны между собой и что в чем должно быть.
0
0 / 0 / 2
Регистрация: 11.06.2015
Сообщений: 60
22.10.2016, 19:36
У тебя есть метод public List<Hall> GetHall(), по его аналогии сделай public метод public List<Seat> GetSeat(), и его подставляй в foreach вместо Seat.seat
C#
1
2
 foreach (Seat seat in GetSeat()) // Поиск выбранного в ComboBox места в общем списке 
            {.....
0
0 / 0 / 0
Регистрация: 06.09.2016
Сообщений: 6
23.10.2016, 05:43  [ТС]
это неправильно, так как зачем тогда создавать приват лист, если открывать к нему полный доступ через метод...
GetHall тоже неправилен, я его убрал

Сейчас переписал классы

Doctor.cs
Кликните здесь для просмотра всего текста
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 Doctor
    {
        private List<Operation> operation = new List<Operation>();
 
        #region Properties
        public string Name { get; set; }
 
        public int Length
        {
            get { return operation.Count; }
        }
 
        #endregion
 
        #region Methods and Constructors
        public string getOperation(int i)
        {
            return operation[i].Name;
        }
 
        public void AddOperation (Operation oper)
        {
            operation.Add(oper);
        }
 
        public Doctor(string docId)
        {
            this.Name = docId;
        }
 
        public Doctor(string docId, Operation operation)
        {
            this.Name = docId;
            this.operation.Add(operation);
        }        
        #endregion
    }

Operation.cs
Кликните здесь для просмотра всего текста
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
public class Operation
    {
        private List<Doctor> doctor = new List<Doctor>();
        private List<Patient> patient = new List<Patient>();
 
        #region Properties
        public string Name { get; set; }
 
        public int Length
        {
            get { return patient.Count; }
        }
 
        #endregion
 
        #region Methods and Constructors
        public void AddPatient(Patient pat)
        {
            patient.Add(pat);
        }
 
        public void newDoctor(Doctor doc)
        {   
            doctor.Add(doc);
        }
        public string getPatient(int i)
        {
            return patient[i].Name;
        }
        
        public Operation(string operId)
        {
            this.Name = operId;
        }
        #endregion
    }

Patient.cs
Кликните здесь для просмотра всего текста
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
 public class Patient
    {
        private List<Operation> operation = new List<Operation>();
        #region Properties
        public string Name { get; set; }
        
        #endregion
 
        #region Methods and Constructors
        public string getOperation(int n)
        {
            return operation[n].Name;
        }
 
        public void newOperation(Operation oper)
        {
            operation.Add(oper);
        }
 
        public Patient(string patId)
        {
            this.Name = patId;
        }
        #endregion
    }

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

P.S.: Суть программы в том, что я должен вводить хирурга, операцию, которую он делает и привязать к этой операции одного пациента

Графический интерфейс примерно такой:
Название: 8TZA2qUDdTU.jpg
Просмотров: 15

Размер: 8.5 Кб
1. В ComboBox выбираю хирурга.
2. DataGridView заполняется операциями (операции могут иметь одно название, НО содержат разных пациентов. Это не одна и та же операция).
3. Нажав на операцию программа выдает пациента, которого мы привязали к этой операции.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.10.2016, 05:43
Помогаю со студенческими работами здесь

Сглаживание без нарушения геометрии
Здравствуйте, уважаемые форумчане. Такой вот примитивный вопрос:есть конструкция и есть полигон который не должен менять свою...

Скопировать таблицу без нарушения структуры
Здравствуйте! VBA (Excel) Как скопировать таблицу (после выборки) на другой лист? даже вернее будет как сохранить результат выборки...

Добавить b к a1, .. an без нарушения упорядоченности по возрастанию.
Даны целые a1, ..., ап, b (n —некоторая константа, а1 &lt; а2 &lt;… &lt; ап). Если среди чисел а1, ..., ап есть равное b, то оставить a1,…, аn без...

Асинхронный запрос к БД без нарушения MVC
Добрый день, прошу помочь правильно решить задачу: При нажатии кнопки заполнить комбобокс из БД Вопрос: как вынести в отдельный...

Доступ к View без нарушения правил MVVM
Здравствуйте, дорогие форумчане. Я недавно начал изучать MVVM. Вот недавно столкнулся с одной проблемой: как мне , допустим, создать...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru