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

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

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

Author24 — интернет-сервис помощи студентам
есть такие классы
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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.09.2013, 15:30
Ответы с готовыми решениями:

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

как правильно описать if
Почему все равно программа идет дальше если не заполнены текст боксы if...

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

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

5
)))
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
09.09.2013, 15:53 2
Ну так в другой конструкции она будет под другим номером всего лишь, а по сути та же самая+какие-то свойства...
Я вообще-то Компас-3D вспомнил, там в сборке каждая деталь имеет ещё пару свойств, т.е. положение её в пространстве и поворот к осям...
0
1 / 1 / 2
Регистрация: 12.07.2013
Сообщений: 144
09.09.2013, 16:05  [ТС] 3
с остальными свойствами мне понятно. поэтому о них не пишу.
вопрос в том как передавать ссылку на созданную однажды геометрию, а не создавать её каждый раз.
Сейчас классы деталь/конструкция выглядят так:
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
9602 / 4744 / 761
Регистрация: 17.04.2012
Сообщений: 9,592
Записей в блоге: 14
09.09.2013, 16:09 4
Цитата Сообщение от 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
Сообщений: 144
09.09.2013, 16:18  [ТС] 5
а если надо будет "по образу и подобию"? Конструктор копирования?
this.Details.AddDetail(new Detail(Det1))?
0
Администратор
Эксперт .NET
9602 / 4744 / 761
Регистрация: 17.04.2012
Сообщений: 9,592
Записей в блоге: 14
09.09.2013, 16:35 6
Цитата Сообщение от sabrus Посмотреть сообщение
а если надо будет "по образу и подобию"?
Не обязательно создавать экземпляр во время передачи в метод, можно отдельно создать, а потом везде использовать:
C#
1
2
Detail det1 = new Detail();
this.Details.AddDetail(det1);
Если это невозможно, то можно реализовать в классе интерфейс ICloneable и копировать объект, вызывая Clone. К сожалению, этот метод не очень хорош, Psilon в своём блоге написал альтернативную реализацию этой возможности: тут
0
09.09.2013, 16:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.09.2013, 16:35
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru