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

Как правильно описать деталь с номером?

09.09.2013, 15:30. Показов 858. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть такие классы
1. конструкция {list<detail> details;}
2. деталь: 3D тело
3. 3D тело
нужно описать такую логику работы приложения:
создается некоторый набор деталей, и этим набором моделлируются конструкции, т.е. м/у деталь -набор конструкций - отношение "один ко многим". При этом одна и таже(геометрически) деталь имеет в разных конструкциях разный "номер".
Например детали: дет1, дет2,дет3
конструкции: кон1{дет1,дет1,дет1}, кон2{дет3,дет1,дет1},кон3{дет1,дет1,дет2 }
т.е. вопрос - как передавать в список деталей конструкции не экземпляр класса деталь, а ссылку на один и тот же экземпляр при условии что детали одинаковые.
Пардон если сумбурно.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.09.2013, 15:30
Ответы с готовыми решениями:

Матрица: строку с номером n сделать столбцом с номером n, а столбец с номером n- строкой с номером n
Дана действительная квадратная матрица порядка n. Преобразовать матрицу по следующему правилу: строку с номером n сделать столбцом с...

как правильно описать if
Почему все равно программа идет дальше если не заполнены текст боксы if (textBox1.Text != &quot;&quot;) if...

Как правильно описать __property?
в классе есть объект TList; доступ к нему из вне есть и для чтения всех данных и для добавления, но мне нужно знать когда в него были...

5
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
09.09.2013, 15:53
Ну так в другой конструкции она будет под другим номером всего лишь, а по сути та же самая+какие-то свойства...
Я вообще-то Компас-3D вспомнил, там в сборке каждая деталь имеет ещё пару свойств, т.е. положение её в пространстве и поворот к осям...
0
1 / 1 / 2
Регистрация: 12.07.2013
Сообщений: 146
09.09.2013, 16:05  [ТС]
с остальными свойствами мне понятно. поэтому о них не пишу.
вопрос в том как передавать ссылку на созданную однажды геометрию, а не создавать её каждый раз.
Сейчас классы деталь/конструкция выглядят так:
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
59
public class Detail
    {
        public Entity3D GeomBody;
        public Point3D Origin;
        public int OriginVertex = 0;
        public double mass = 0;
 
        public Detail()
        {
        }
 
public class Construction
    {
        public List<Detail> Details = new List<Detail>();
        public double mass=0;
        public string name = "";
        public string id = "";
        public List<View> Views = new List<View>();
        public Size3D Gabarit = new Size3D(new Point3D(0, 0, 0), new Point3D(1, 1 , 1));
 
        public Construction(string i)
        {
            this.id = i;
        }
 
        public void addDetail(Detail Det)
        {
            this.Details.Add(Det);
            this.mass += Det.mass;
        }
 
        public void addDetails(Detail[] DetList)
        {
            foreach (Detail Det in DetList) this.addDetail(Det);            
        }
 
        public void addView(View View)
        {
            this.Views.Add(View);            
        }
 
        public void addViews(View[] ViewSet)
        {
            foreach (View View in ViewSet) this.addView(View);
        }
        
        public Size3D GetSize(Detail[] DetList)
        { 
            
            foreach (Detail Det in this.Details)
            {
 
            }
 
            return this.Gabarit;
        }
 
 
    }
в питоне я бы создал список созданных деталей и спискам деталей в конструкциях передавал бы ссылки на элементы списка деталей:

Python
1
2
3
GeneralDetailList=[det1,det2,det3]
GDL=GeneralDetailList
Construction1.DetailList+=[GDL[1],GDL[1],GDL[1]]
и при изменении детали det1 во всех конструкциях деталь бы менялась. А в шарпе я каждый раз создаю новый экземпляр: this.Details.Add(Det); И соответственно моделлировать конечным набором деталей не получается.
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
09.09.2013, 16:09
Цитата Сообщение от sabrus Посмотреть сообщение
нужно описать такую логику работы приложения
Как-то так
C#
1
2
3
4
5
6
7
8
9
10
11
12
public class Construction
{
    public List<Detail> Details { set; get; }
    
    public Construction(params Detail details[]) {
        Details = new List<Detail>(details);
    }
}
 
public class Detail : Form3D {}
 
public class Form3D {}
Цитата Сообщение от sabrus Посмотреть сообщение
как передавать в список деталей конструкции не экземпляр класса деталь, а ссылку на один и тот же экземпляр при условии что детали одинаковы
Классы передаются по ссылке, так что дополнительно делать ничего и не нужно.
C#
1
2
3
4
5
6
7
8
9
10
Detail det1 = new Detail();
Detail det2 = new Detail();
Detail det3 = new Detail();
 
// Во всех экземплярах класса Construction в списке Details
// содержатся ссылки на участок памяти, по которому 
// располагаются экземпляры класса Detail
Construction con1 = new Construction(det1, det1, det1);
Construction con2 = new Construction(det3, det1, det1);
Construction con3 = new Construction(det1, det1, det2);
Добавлено через 1 минуту
Цитата Сообщение от sabrus Посмотреть сообщение
и при изменении детали det1 во всех конструкциях деталь бы менялась
И это будет происходить при применении моего кода
0
1 / 1 / 2
Регистрация: 12.07.2013
Сообщений: 146
09.09.2013, 16:18  [ТС]
а если надо будет "по образу и подобию"? Конструктор копирования?
this.Details.AddDetail(new Detail(Det1))?
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
09.09.2013, 16:35
Цитата Сообщение от sabrus Посмотреть сообщение
а если надо будет "по образу и подобию"?
Не обязательно создавать экземпляр во время передачи в метод, можно отдельно создать, а потом везде использовать:
C#
1
2
Detail det1 = new Detail();
this.Details.AddDetail(det1);
Если это невозможно, то можно реализовать в классе интерфейс ICloneable и копировать объект, вызывая Clone. К сожалению, этот метод не очень хорош, Psilon в своём блоге написал альтернативную реализацию этой возможности: тут
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.09.2013, 16:35
Помогаю со студенческими работами здесь

Как правильно описать структуру БД?
Я делаю чат и мне понадобилась БД для списка пользователей. Там будут в частности администраторы и баны. Я использую Entity Framework и...

Как правильно описать select?
Здравствуйте! есть форма отправки, в которой имеется select &lt;span&gt;Цвет: &lt;select&gt; &lt;option...

Как правильно описать массив
Как правильно описать в СИ# массив с размерностью 2*n

Как правильно описать все параметры?
Что-то запуталась... Это модуль на ввод одномерного целочисленного массива. Unit vvod; Interface Function Vvod; ...

Как правильно описать тип данных
Парни, переделываю программу на Delphi в С++. Столкнулся с проблеммой. Не знаю, как в С++ описыватся такой тип данных. type ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru