|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#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 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
beg-in-erналичие указателя на класс полностью заменяет этот адовый поиск. Указателя на ОБЪЕКТ (экземпляр класса). И не заменяет. Вместо шастания по линиям вы будете шастать по псевдо-точкам. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 17:47 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
Edd.Dragon Но что это за задача, требующая такой избыточности? это общая задача о единоначалии. какие бы манипуляции о "объектом" я не производил, все остальные, кто на него ссылается слушаются безприкословно. ну да ладно. видимо опять придётся впрягатся в костыли. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 17:54 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
beg-in-erЯростный Мечесли, например, надо сдвинуть точку (5, 5), но для каких-то линий этого делать не нужно. это не существующий вариант. beg-in-erкогда точка уже была , и её сместили в ту область пространства , которая "занята" другой точкой.любопытно! Т.е. ситуация, когда из одной точки делаем две разных, исключена, зато две разные могут стать одинаковыми? В итоге рано или поздно придем к одной точке ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 18:02 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
Edd.DragonВопрос в том, чем плохо наличие больше одной точки с одинаковыми координатами?будет непонятно, какую точку - А или В - использовать для нового объекта, если у них одинаковые координаты. При том что одна из них в дальнейшем может сдвинуться. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 18:07 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
мне не понятно вообще откуда всплыло это понятие "указатель на класс" емнип, это что-то из smalltalk чтоли? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 18:37 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
.NETмне не понятно вообще откуда всплыло это понятие "указатель на класс" емнип, это что-то из smalltalk чтоли?в Делфи вроде такое есть (по крайней мере в 6-м было). хотя название топика неудачное. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 18:44 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
beg-in-erEdd.Dragon Но что это за задача, требующая такой избыточности? это общая задача о единоначалии. какие бы манипуляции о "объектом" я не производил, все остальные, кто на него ссылается слушаются безприкословно. ну да ладно. видимо опять придётся впрягатся в костыли. Они и так случшаются. Замена координат в объекте-точке - это манипуляция с объектом. В линиях для этого же ничего менять не надо. А вот замена самого объекта - это манипуляция с двумя объектами. Один из которых - новый. Что странного в том, что придется пройтись по N объектам и вписать в них новенького? Ничего. Ровто то же самое ты делал, когда создавал миллион линий и каждой из них первый раз прописывал ссылки на точки. Но создание было 1 раз. А слепка (по всей видимости) - это чуть ли не единственная и очень многократная операция у тебя. Потому нет ничего костыльного во введении промежуточного класса или массива. Главное, чтобы он не стал головной болью в других операциях. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 18:57 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
.NETмне не понятно вообще откуда всплыло это понятие "указатель на класс" емнип, это что-то из smalltalk чтоли? Я все до сих пор надеюсь что автор поведает, как он умудряется множественное наследование делать в .NET. А он утверждал что это возможно! ) Но на самом интересном исчез куда-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 19:07 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
Edd.Dragon, авторА вот замена самого объекта - это манипуляция с двумя объектами. Один из которых - новый. Что странного в том, что придется пройтись по N объектам и вписать в них новенького? Ничего. Ровто то же самое ты делал, когда создавал миллион линий и каждой из них первый раз прописывал ссылки на точки. я мож малость неточно выразился. "объект" был взят в кавычки - тут "Объект" это точка с конкретными координатами , без привязки к способу реализации. манипуляции с "объектом" это любые действия связанные с точкой, вплоть до пересоздания класса Point. т.е. если вызвать new Point ( бывает и такая необходимость, например класс Point2, с дополнительными полями ) вообще ничего не должно будет изменится. а пробегатся по всем примитивам это тоже утомительно. т.к. разные примитивы имеют разное количество точек. в частности линия 2 точки, квадрат 4, кривая безье 4, многогранник..... не конечно можно под них написать обходчик, но это тоже костыль. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 19:08 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
LexxxxxЯ все до сих пор надеюсь что автор поведает, как он умудряется множественное наследование делать в .NET. А он утверждал что это возможно! ) Но на самом интересном исчез куда-то. Lexxxx. я помню, помню. ща просто не до него. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 19:09 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
beg-in-erманипуляции с "объектом" это любые действия связанные с точкой, вплоть до пересоздания класса Point. т.е. если вызвать new Point ( бывает и такая необходимость, например класс Point2, с дополнительными полями ) вообще ничего не должно будет изменится. Это как так?! На кой хрен чем-то манипулировать если ничего не должно изменится?! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 19:11 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
beg-in-er, Point конечно абстрактно можно назвать объектом, но все таки это структура, со всеми вытекающими ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 19:11 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
Где-то в степиbeg-in-er, Point конечно абстрактно можно назвать объектом, но все таки это структура, со всеми вытекающими хорошо ,речь идёт не о System.Drawing.Point а о MyProject.Point ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 19:18 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
LexxxxxЭто как так?! На кой хрен чем-то манипулировать если ничего не должно изменится?! ну была обычная точка , у которой было всего 2 поля - координаты. и внезапно она стала волшебной - точкой поворота, вершиной или чем то ещё. тогда мы эту точку должны переопределить. но при этом те, кто на неё ссылается не должны пострадать. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 19:24 |
|
как реализовать "указатель" на класс
|
|||
---|---|---|---|
#18+
beg-in-erа пробегатся по всем примитивам это тоже утомительно. т.к. разные примитивы имеют разное количество точек. в частности линия 2 точки, квадрат 4, кривая безье 4, многогранник..... не конечно можно под них написать обходчик, но это тоже костыль. Так любой код можно назвать костылем, т.к. приходится что-то придумывать и описывать ))) beg-in-erну была обычная точка , у которой было всего 2 поля - координаты. и внезапно она стала Другой точкой. Чтобы никто от этого в панику не впал, ты и ввел понятие "Morfable Point". Да, это костыль между твоими мыслями и данными в памяти машины. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2012, 19:33 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1405500]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
64ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
76ms |
get tp. blocked users: |
2ms |
others: | 323ms |
total: | 506ms |
0 / 0 |