|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
как мне сделать так , что бы поменять класс только в одном месте, и что бы оно везде стало нормуль. были бы узазатели на класс. кинул бы где недо , и делов. а как без указалей лучше сделать пусть есть класс Person Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
и типа если мне надо заменить/подменить экземляр класса Person во всех классах куда он входит то мне тупо надо обойти все нужные классы, найти нужный экземпляр и заменить на новый. ( Вариант с заменой значений , а не заменой класса не годится) как такое лучше реализовать. ( или опять придётся делать класс-посредник, эмулятор указателя.) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 16:28 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
что такое указатель на класс? термин класс существует только во время разработки, это абстракция. во время выполнения никаких классов нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 16:31 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
beg-in-er( Вариант с заменой значений , а не заменой класса не годится) А toper - это массив чего? Значений, объектов, экземпляров или классов? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 16:36 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
возможно стоит использовать интерфейсы ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 16:40 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
sld, Как именно? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 16:48 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
Edd.DragonА toper - это массив чего? Значений, объектов, экземпляров или классов? ну если не совсем понятно , вот более понятный пример Код: c# 1. 2. 3. 4. 5. 6.
любая линия опирается на точки. если 2 линии входят имеют одну общую точку , то это должен быть один и тот экземпляр класса Point. так вот было 2 паралельные линии (100,100)(200,100) и (100,200)(200,200). создано 4 экземпляра класса Point. потом потребовалось линии соединить в координате (100,100). станет 3 точки , одна выбрасывается. и вот та, которая выбрасывается, должна быть заменена на другую. не получить новое значение , а именно заменить ( иначе будет 2 точки с одинаковым значением - очень плохо). заменять точку , пробегаясь по всем линиям плохое решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 16:57 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
sldвозможно стоит использовать интерфейсы это не решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 16:58 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
beg-in-erдолжна быть заменена на другую. не получить новое значение , а именно заменитьобычное присваивание. Point P0 - это ведь ссылка на экземпляр Поинт ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 17:00 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
Яростный Мечобычное присваивание. этот вариант хорош, но! если линий миллион , да и не только линий , а и других графических примитивов, то простое присваивание это уже банальный перебор. точка то не знает , кто на неё ссылается, в какие множества она входит. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 17:08 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
beg-in-erЯростный Мечобычное присваивание. этот вариант хорош, но! если линий миллион , да и не только линий , а и других графических примитивов, то простое присваивание это уже банальный перебор. точка то не знает , кто на неё ссылается, в какие множества она входит. если каждая точка создавалась с помощью new, то да это будут разные указатели и как их все обновить, кроме как в цикле сказать сложно ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 17:14 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
Создай себе коллекцию точек, и добавляй туда только новые точки, по мере создания, если требуемая точка уже была создана бери её из коллекции. Тогда у тебя все одинаковые точки будут ссылкой на один и тот же объект, и ты сможешь менять их одновременно везде. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 17:18 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
beg-in-er любая линия опирается на точки. если 2 линии входят имеют одну общую точку , то это должен быть один и тот экземпляр класса Point. так вот было 2 паралельные линии (100,100)(200,100) и (100,200)(200,200). создано 4 экземпляра класса Point. потом потребовалось линии соединить в координате (100,100). станет 3 точки , одна выбрасывается. и вот та, которая выбрасывается, должна быть заменена на другую. не получить новое значение , а именно заменить ( иначе будет 2 точки с одинаковым значением - очень плохо). заменять точку , пробегаясь по всем линиям плохое решение. ну если не совсем понятно , вот более понятный пример P1 = {100, 100} // P1.x и P1.y P2 = {100, 200} P3 = {200, 100} P4 = {200, 200} L1 = {P1, P2} // L1.start и L2.end L2 = {P3, P4} // ЗАМЕНЯЕМ в L2 точку P3 на P1: L2.start = P1 // Стало: L1 = {P1, P2} L2 = {P1, P4} Где же по-вашему мы создали новую точку?! Таки заменили. И, главное, как же по-вашему без строчки L2.start = P1 иначе произвести замену? Я так понял, что вы представили себе, как не точку в прямой меняете (согласно постановке задачи), а вместо этого меняете координаты точки, которая стала лишней. И полагаете, что каким-то чудесным образом компьютер должен сам решить, что раз у ней новые координаты совпали с точкой P1, то и надо ее заменить на P1 автоматически. Ну разумеется, что для такого поведения вы должны соорудить прослойку, которая будет это делать. Компьютер же - не координатная плоскость с точками. Для него пара чисел - это просто пара чисел. А пары чисел, находящиеся в разных местах памяти - это разные пары чисел, в разных местах памяти. Вы в своем воображении перетянули одну точку на другую и для вас они обе стали одной. Разумеется, комп этому надо научить. Если действительно надо. И да, это будет что-то типа хранилища точек. А уже на них будут ссылаться линии и прочие абстракции. Тогда вы надцатой точке меняете координаты на новые, а по линиям, которые на нее ссылаются, не шастаете. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 17:21 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
.NETи как их все обновить, кроме как в цикле сказать сложно Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
заменив в ZPoint значение realpoint всё будет хорошо. все линии будут ссылатся на то , что нужно. и не надо никаких цыклов и сложностей с разными примитивами. но эти посредники - это же такой костыль. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 17:23 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
beg-in-er.NETи как их все обновить, кроме как в цикле сказать сложно Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
заменив в ZPoint значение realpoint всё будет хорошо. все линии будут ссылатся на то , что нужно. и не надо никаких цыклов и сложностей с разными примитивами. но эти посредники - это же такой костыль. Это какая-то ерунда. Вот моё предложение 13633662 последующий постер его поддерживает нужно хранилище точек ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 17:26 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
beg-in-erэтот вариант хорош, но! если линий миллион , да и не только линий , а и других графических примитивов, то простое присваивание это уже банальный перебор. точка то не знает , кто на неё ссылается, в какие множества она входит. А откуда она взялась и с чего вдруг поменяла свои координаты? Вот я в Кореле рисую. Тяну точку. Просто точку? Или точку конкретного многоугольника? Я же точно знаю, к чему она относится, а к чему нет? Так чего я буду перебирать всё? А вот если наоборот - точки у вас главенствуют, а фигуры к ним привязаны. Тогда и структуры данных соответсвующим образом стройте. Т.е. "Сборище используемых точек" - это первое, что должно было у вас появится )) И это не класс-посредник, а одна из ключевых абстракций будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 17:26 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
Edd.Dragon, автора вместо этого меняете координаты точки ну так в этом то весь и смысл. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 17:27 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
.NETнужно хранилище точек+1 только тогда может возникнуть другая проблема - если, например, надо сдвинуть точку (5, 5), но для каких-то линий этого делать не нужно. Тогда придется им назначать новую точку. к тому же если у нас уже есть (5, 4), то превращение (5, 5) в (5, 4) приведет к дублированию. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 17:31 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
Яростный Меч.NETнужно хранилище точек+1 только тогда может возникнуть другая проблема - если, например, надо сдвинуть точку (5, 5), но для каких-то линий этого делать не нужно. Тогда придется им назначать новую точку. к тому же если у нас уже есть (5, 4), то превращение (5, 5) в (5, 4) приведет к дублированию. да это всё верно только пока не надо грузить товарища ))) пусть он хотя бы поймёт чего ему предлагают сделать ) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 17:33 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
Да, вот только коллекция используемых точек не избавляет от появления дубликатов в процессе ИЗМЕНЕНИЯ координат. Точнее, в случае уникальной коллекции будем получать подзатыльник ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 17:34 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
Тьху ты, у дураков мысли сходятся прям как эти самые точки ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 17:35 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
Edd.DragonДа, вот только коллекция используемых точек не избавляет от появления дубликатов в процессе ИЗМЕНЕНИЯ координат. Точнее, в случае уникальной коллекции будем получать подзатыльник ну а что коллекция будет не уникальна и заменять будем точкой из коллекции если она там есть с нужными координатам если нет то создаём новую ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 17:39 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
Яростный Мечесли, например, надо сдвинуть точку (5, 5), но для каких-то линий этого делать не нужно. это не существующий вариант. .NETтолько пока не надо грузить товарища ))) пусть он хотя бы поймёт чего ему предлагают сделать ) предлагаемый вариант коллекции не избавляет от ситуации подмены точек. подмены! когда точка уже была , и её сместили в ту область пространства , которая "занята" другой точкой. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 17:39 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
.NETпусть он хотя бы поймёт чего ему предлагают сделать ) Так проблема дублирования его как раз и волновала больше всего. Короче говоря, как не реализуй, а все-равно найдутся операции, требующие перебора с целью изменения содержимого объектов. Чтобы минимизировать затратность таких операций - нужна грамотная иерархия или индексация, позволяющая не перебирать весь миллион объектов, когда в этом нет реальной необходимости. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 17:41 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
Edd.Dragon...требующие перебора с целью изменения содержимого объектов. Чтобы минимизировать затратность таких операций - нужна грамотная иерархия или индексация, позволяющая не перебирать весь миллион объектов, когда в этом нет реальной необходимости. наличие указателя на класс полностью заменяет этот адовый поиск. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 17:44 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
beg-in-erкоторая "занята" другой точкой. Вопрос в том, чем плохо наличие больше одной точки с одинаковыми координатами? Если это не допустимо, то таки перебор. Если перебор оооочень тяжелый, то возможно придется для каждой точки кроме координат хранить еще "Массив объектов, которые на меня ссылаются". Но что это за задача, требующая такой избыточности? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 17:44 |
|
|
start [/forum/topic.php?fid=20&msg=38079864&tid=1405500]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 177ms |
0 / 0 |