Здравствуйте, Serginio1, Вы писали:
AVK>>И какое отношение статические методы или атрибуты имеют к количеству экземпляров?
S> Вызов конструкторов, дополнительная информация о классах.
И что вызов конструкторов?
AVK>>Не можно, а нужно. S> Так и делается только с ограничением на количество экземпляров класса .
При чем тут количество экземпляров?
S>>> а повторно использовать уже созданные, но там тоже возникают проблемы с освобождение подчиненных объектов.
AVK>>Какие? S> Например есть объект, у него поле со ссылкой на другой объект. Иногда приходится делать поиск. S> Док.Клиен.Договор.Счет и еще можно привести кучу примеров. Но теперь у следующего клиента эти поля не нужны клиента не нужны.
Ну и какое это имеет отношение к кешу метаданных?
S>>> Легче создать и удалить.
AVK>>Это при 10 то миллионах вызовов и 400 классах? Ну ну. S> Смех смехом А вот разницы как раз и нет. Создание происходит очень быстро и 10 мил это пшик. Во Во. Но кончно же кэширутся,
Что кешируется? Что создается? Ты опять о чем то о своем.
AVK>Что кешируется? Что создается? Ты опять о чем то о своем.
Ну не совсем, я об этом уже сколько толкую.
Пример, есть документ у которого есть поле неопределенного типа Субкото, по Ид типа я должен создать экземпляр класса и просчитать, в следующей записи документа Субконто имеет другой тип.
Старое значение субконто записывается в таблицу с ассоциированным с типом кэшем экземпляров типа или уничтожается. Итак далее. Но данный пример только с одним документом, на самом деле этих документов может быть много. Вся беда с неопределенными типами.
И нужно вызывать конструкторы и брать из кэша.
Мета классы позволяют легко создавать объекты данного типа и создавать и получать статическую информацию для данного типа.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Igor Trofimov, Вы писали:
iT>1. Передача типа — потомка заданного типа iT>
iT>type TControlClass = class of TControl;
iT>procedure AddControl(ControlClass : TControlClass);
iT>
iT>2. Извлечение информации о типе, специфичной для всех типов — подтипов заданного iT>
iT>// Базовый тип
iT>type DataSet = class(Component)
iT> ...
iT> // Виртуальный член типа
iT> class function GetDataSetName : string; virtual;
iT> ...
iT>end;
iT>// Ссылка на тип, производный от базового
iT>TDataSetClass = class of TDataSet;
iT>...
iT>// Переменная ссылки на такой тип
iT>var DataSetClass : TDataSetClass;
iT>....
iT>// Извлечение информации о конкретном типе
iT>ShowMessage(DataSetClass.GetDataSetName);
iT>
Привыкли все делать одним путем напоминающим русское достижение в области удалния кланд и считаете что других путей нет:
Type type = dataSetCastToObject.GetType();
Console.WriteLine(type.Name);
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, AndrewVK, Вы писали:
AVK>Нет конечно, ничего такого он не подразумевал. Просто когда говорят что что то нужно, потому что очень хочется, никак не обосновывая то естественно возникает вопрос — нафига?
Вот именно.
iT>>Итак, я привел тебе два конкретных примера,
AVK>Какие то они некудышние.
Ага. Эмуляция GetType .
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Igor Trofimov, Вы писали:
iT>Ну, может, я плохо сформулировал, но, надеюсь, сама проблема понятна?
Не. В том то и дело. Что ну в упор не вижу поблему.
С помощью этих фич ты решаешь две проблемы: 1. Получение информации о типе в рантайме. Это в дотнете делает метод GetType, причем не от илюзорного класса, а от любокго объекта ссылку на который можно получить. 2. Динамическое создание экземпляра объекта. Это решается Activator-ом.
Так что проблема просто в том, что вам похоже просто хочется, что бы было как в Дельфи.
Ято же касается рассуждений о других языках... то приведите хоть один кроме дельфи где были бы виртуальные метода не-инстанс-методы.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VD>Привыкли все делать одним путем напоминающим русское достижение в области удалния кланд и считаете что других путей нет: VD>
VD>Type type = dataSetCastToObject.GetType();
VD>Console.WriteLine(type.Name);
VD>
VD>
Да суть то в том, что хочется этот Type расширить, а кроме как метаклассов не получится.
Тебе хватает type.Name, а кому то нужно несколько другое представление и отображение.
Вопрос тебе Type на все случаи жизни хватает?????
и солнце б утром не вставало, когда бы не было меня
VD>Type type = dataSetCastToObject.GetType();
VD>Console.WriteLine(type.Name);
VD>
VD>
Кроме того сам Type это метакласс но не расширяемый.
Предлагают ассоциированный с этим типом расширяющий его метакласс, не нравится.
Вот и пойми , что человеку нужно.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S>Здравствуйте, VladD2, Вы писали: VD>>
VD>>Type type = dataSetCastToObject.GetType();
VD>>Console.WriteLine(type.Name);
VD>>
VD>> S> Кроме того сам Type это метакласс но не расширяемый. S>Предлагают ассоциированный с этим типом расширяющий его метакласс, не нравится. S>Вот и пойми , что человеку нужно.
Кроме того организован он как в Delphi ссылка в VMT с отрицательным смещением(по поводу C++ был спор и ответ получил что не определено)
и по сути все его методы можно считать статическими виртуальными.
Метаклассы несут ту же нагрузку только расширяемы.
и солнце б утром не вставало, когда бы не было меня
ST>а, видимо, в том, чтобы решать свои задачи адекватными для выбранной платформы (в т.ч. языковой) методами и платформы правильно для своих задач выбирать
Здравствуйте, mihailik, Вы писали:
M>>>И что, в дотнете нет готового решения? S>> Решить можно все и не обязательно на до нете.
M>Это угроза?
S>>Но так как Type не расширяем, то дельфевые метаклассы этим как раз и занимаются. Плохо это или хорошо решать каждому индивидуму.
M>Ладно. Каждому так каждому. Но если есть готовое средство, делать "дельфёвые метаклассы" по меньшей мере экстравагантно.
Почему экстравогантно. Delphi 8 сама их делает. Но нет готового средства.
Вот объясни мне дураку, чем расширение Type экстравагантно????
А ведь Type тот же метакласс.
и солнце б утром не вставало, когда бы не было меня
M>>Ладно. Каждому так каждому. Но если есть готовое средство, делать "дельфёвые метаклассы" по меньшей мере экстравагантно.
S>Вот объясни мне дураку, чем расширение Type экстравагантно????
Ну потому, что и так всё путём. Как говорится, зачем платить больше?
P.S. Не, ну если в Дельфи есть — хорошо. А к C# прикручивать это фанатизм чистой воды. Такое нужно наказывать рублём
Здравствуйте, mihailik, Вы писали:
M>>>Ладно. Каждому так каждому. Но если есть готовое средство, делать "дельфёвые метаклассы" по меньшей мере экстравагантно.
S>>Вот объясни мне дураку, чем расширение Type экстравагантно????
M>Ну потому, что и так всё путём. Как говорится, зачем платить больше?
M>P.S. Не, ну если в Дельфи есть — хорошо. А к C# прикручивать это фанатизм чистой воды. Такое нужно наказывать рублём
Да ради бога, если так рассуждать мне тоже много не нужно. И зачем только насоздавали не нужного кода???
И уж если говорить об ООП, нужно это или не нужно не важно, то почему Type нельзя расширять??? Чем он отличается от любого класса????
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S> Да суть то в том, что хочется этот Type расширить, а кроме как метаклассов не получится.
Фигню не гвори. Это же не макросы. Создавай код (хоть эмитом) и расширяй на здоровье.
S> Тебе хватает type.Name, а кому то нужно несколько другое представление и отображение.
Впримере было получение имени. Вам уже тут не раз говорилось — говорите не как делать, а что делать. Тогда и ответ будет более конструктивный. С помощью рефлекшона можно вынуть любую информацию о типе. Ну, разве что до кода добраться не выйдет.
S> Вопрос тебе Type на все случаи жизни хватает?????
Ну, водку и баб не заменяет конечно...
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Serginio1, Вы писали:
S> Кроме того организован он как в Delphi ссылка в VMT с отрицательным смещением(по поводу C++ был спор и ответ получил что не определено) S>и по сути все его методы можно считать статическими виртуальными. S>Метаклассы несут ту же нагрузку только расширяемы.
Очень советую не говорить о том, о чем имешь поверхностное представление. Если действительно интересно как устроена рантайм-информация о типах в дотнет ищи в гугле по словам metod table, fjit.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.