Слушай, меня твоя игра в морской бой несколько раздражает. Ты или иди "крепче спать". Или объясняй толком что ты хочешь добиться?
ST>я что, должен, искать в топике все твои однообразные высказывания и отвечать односложно ? зачем дублировать сообщения в разных ветках ?
Ты вот это читал?
ST>заведи ветку под названием "Activator.CreateInstance" — там обсудим твое предложение (в данном случае оно бессмысленно, а почему — подумай малость)
Учись задавать вопросы так чтобы на них можно было ответить, тогда и не то не будут предлагать.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, AndrewVK, Вы писали:
AVK>На этот вопрос тебе давно ответили — нету. А для того чтобы сказать что есть вместо нужна конкретная задачка в которо тебе это понадобилось.
АВК, снеси этот морской бой во флйм. Там как раз давно таких умных тем небыло.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, s.ts, Вы писали:
ST>>все маньяки плохо кончают (и маньяки дотнета тоже — понятно к чему я ?)
VD>Понятно, понятно... понятно что Шарп у тебя второй язык.
в каком смысле ?
1. если в смысле второй по степени владения, а 1-м считать русский, то ты мне явно льстишь
2. если второй по счету, а первым ты считаешь какой-то другой ЯП, то ты меня явно недооцениваешь
не поверишь:
c, c++, matlab, clipper ( несколько ассемблеров и языков субд — не в счет ?) последний год/полтора — дельфи (турбо-паскаль в детском возрасте, видать, тоже не в счет ), далее, кажется, с#
перечислил только то, на чем больше года писал каждый день (ефстефстфенно, не в академических целях)
такие, млин, дела
в общем, что бы ты не имел ввиду, опять пальцем в небо
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, s.ts, Вы писали:
ST>>не знаю как уж там в лиспе, но в с++ сабж. реализуется запросто (шаблоны+макросы)
VD>Ты себе плохо представляешь задачу. С++ язык статический. И в чтобы сделать каие-нибудь рантайм-навороты нужно ой как попатеть.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, s.ts, Вы писали:
ST>>и со своим createInstance ты мимо кассы попал
VD>У тебя касса замаскирована. Если бы ты скзал, что тебе нужно, то и проблем не было бы. А ты вмето этого пытаешся применять опыт полученый на не аналогичном продукте. Причем делашь это бездумно и упорно.
можно было ответить односложно :
" нет. никак. не предвидится. лучшее, что можешь сделать — создавать фабрики классов. для автоматизации этой работы используй меню правка->заменить...других идей у меня нет..."
ну а у кого есть идеи лучше, чем меню "замена", могут высказать свое мнение. и ведь пытались, кабы не появился тут некий "борец за непонятно что, но против" с ответами типа "а зачем?"
опять раздули черти-что
на работу-то время остается? или вся жизнь в форуме ?
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, s.ts, Вы писали:
ST>>посмотрел ST>>мимо
VD>А куда стрелял то?
ты цитирование удалил, чтобы не иметь ответа на свой вопрос чуть выше?
ок. размещаю его ниже:
R>
ST>Здравствуйте, VladD2, Вы писали:
VD>>В общем, без разницы. Пишел в МСДН-е "Activator class" в индексе и читаешь описание.
ST>Ok. посмотрю. закрыто.
VD>Кстати, почти уверен что для менеджед-классов этой фигни с виртуальными статическими методами сделать будет нельзя. В дотнете просто нет этого бреда.
Угу. И очень жаль, что нет этого, как ты выразился "бреда".
Имхо, "бред" — это скорее inplace-делегаты и yield (или как он правильно пишется?).
А точнее, не бред — а не такая уж и нужная и бесспорная вещь.
А вот возможность получить ссылку на тип, обязательно являющийся подклассом заданного типа — это очень и очень ценная возможность, повышающая типобезопасность. без нее приходится делать тупые проверки и потенциально небезопасный кастинг вниз по иерархии.
Или, например, возможность узнать у типа какую-то информацию о типе, но не только банальный FullName, а что-то более интересное.
Например, для любого типа typed dataset узнать информацию о структуре, не создавая экземпляра за счет виртуальных членов типа dataset. Было бы неплохо.
Расскажи, как вы, выходцы из C++, обделенного такими возможностями, решаете подобные задачи.
Здравствуйте, s.ts, Вы писали:
ST>c, c++, matlab, clipper ( несколько ассемблеров и языков субд — не в счет ?) последний год/полтора — дельфи (турбо-паскаль в детском возрасте, видать, тоже не в счет ), далее, кажется, с#
ST>перечислил только то, на чем больше года писал каждый день (ефстефстфенно, не в академических целях)
ST>такие, млин, дела
Возможно. Но то упорство с которым ты пытаешся получить отсуствующую и не нужную возможность наводит на мысли. Странно, что ты не потребовал множественного наследования, обработки формул в мат-виде, и изам-инструкций для управления БД.
ST>в общем, что бы ты не имел ввиду, опять пальцем в небо
Ну, вот такой уж ты игрок в морской бой. Все вынуждаешь бить по площадям. А я как-то не очень люблю эту игру.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Igor Trofimov, Вы писали:
iT>Угу. И очень жаль, что нет этого, как ты выразился "бреда". iT>Имхо, "бред" — это скорее inplace-делегаты и yield (или как он правильно пишется?). iT>А точнее, не бред — а не такая уж и нужная и бесспорная вещь.
Это все синтаксический сахар. Ничего концептуального. Удобно, только и всего.
iT>А вот возможность получить ссылку на тип, обязательно являющийся подклассом заданного типа — это очень и очень ценная возможность, повышающая типобезопасность. без нее приходится делать тупые проверки и потенциально небезопасный кастинг вниз по иерархии.
ДаунКастинг принципиально не может быть опасным. Ты видимо имел ввиду наоборт АпКастинг.
Честно говоря вообще не ясно зачем вы там химичите в таких объемах. Ну, да ваше дело. То что было в Дешьфи — это чистой воды грязный хак. Причем от АпКастинга он не спасает. Один фиг придется делать приведение. Ни в одной книге по ООП ты не найдеш такой фичи как в дельфи.
iT>Или, например, возможность узнать у типа какую-то информацию о типе, но не только банальный FullName, а что-то более интересное.
А в чем проблема?
iT>Например, для любого типа typed dataset узнать информацию о структуре, не создавая экземпляра за счет виртуальных членов типа dataset.
Да нет проблем. Типизированный датасет — это обычный класс дотнета. Получай его описание в виде Type и читай все что хочешь. Вот только зачем тебе это? В рантайме куда удобнее и быстрее читать обычный датастет (если он создан динамически), а если он создан статически, то нифига фигней заниматься используй его как известный тип и будет тебе счастье.
iT> Было бы неплохо. iT>Расскажи, как вы, выходцы из C++, обделенного такими возможностями, решаете подобные задачи.
Везде есть свои подходы, свои приемущества и недостатки. На тех же шаблонах народ творин совершенно не вероятные вещи. Только за частую — это такой же изврат как только что предложил ты.
Что же касается "вы... из С++"... у меня нет отдельной любви к С++, хотя на нем я программировал наверно дольше всего. Я и на дельфи года три пописал. Так что более чем реально представляю возможности. У дотнетных языков возможностей не меньше, просто их нужно с умом и по месту использовать. Задница как раз и начинается, когда пытаются эмулировать что-то на чем-то не вместо того чтобы решать свои задачи оптимальным образом.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, s.ts, Вы писали:
ST>можно было ответить односложно : ST>" нет. никак. не предвидится. лучшее, что можешь сделать — создавать фабрики классов. для автоматизации этой работы используй меню правка->заменить...других идей у меня нет..."
Тебе это человек пять ответило, но тебе же мало.
ST>ну а у кого есть идеи лучше, чем меню "замена", могут высказать свое мнение. и ведь пытались, кабы не появился тут некий "борец за непонятно что, но против" с ответами типа "а зачем?"
Вообще-то это вопрос. Но можно ответить и так. На дурацкие вопросы даем одекватные ответы.
ST>на работу-то время остается? или вся жизнь в форуме ? ST>
Ты в календарь заглядываешь?
И вообще, что-бы не заботиться о своем благосостоянии, работе и т.п. У меня то проблем ни с работой, ни с зарплатой нет. Чего и вам желаю.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VD> ДаунКастинг принципиально не может быть опасным. Ты видимо имел ввиду наоборт АпКастинг.
Ну это как дерево рисовать С корнем внизу или с корнем наверху.
iT>>Например, для любого типа typed dataset узнать информацию о структуре, не создавая экземпляра за счет виртуальных членов типа dataset.
VD>Да нет проблем. Типизированный датасет — это обычный класс дотнета. Получай его описание в виде Type и читай все что хочешь.
Замечательно. Как мне из его Type прочитать, сколько таблиц входит в этот typed DataSet и какие у них колонки? Создавать только для этого экземпляр я не хочу — это уродливо!
Заметь, эта информация статична по отношению к конкретному типу датасета — она общая для всех его экземпляров. Хочется получить ее обобщенно из типа. Зная, что этот тип — подтип типа DataSet.
VD>Везде есть свои подходы, свои приемущества и недостатки. На тех же шаблонах народ творин совершенно не вероятные вещи. Только за частую — это такой же изврат как только что предложил ты.
Язаметил, ты очень любишь всякие нехорошие слова "Бред, изврат"
Изврат — это создавать экземпляр объекта, чтобы получить информацию, общую для всех экземпляров, то есть информацию о типе.
VD>Что же касается "вы... из С++"... у меня нет отдельной любви к С++, хотя на нем я программировал наверно дольше всего. Я и на дельфи года три пописал. Так что более чем реально представляю возможности. У дотнетных языков возможностей не меньше, просто их нужно с умом и по месту использовать. Задница как раз и начинается, когда пытаются эмулировать что-то на чем-то не вместо того чтобы решать свои задачи оптимальным образом.
Никто не собирается ничего "эмулировать". Задачи, которые я приводил — вытекают не из возможностей Delphi или другого языка, где это есть, а из самой парадигмы ООП. И именно с отсутствующими возможностями они решались бы оптимальным способом, а не через задницу, как это приходится делать сейчас.
Языки можно сравнивать, если они работают в некоторой общей парадигме (имхо, поэтому C# и Perl несравнимы, а C#, Delphi, Java — сравнимы).
И вот, просто работая в рамках концепции ООП и возникают все эти задачки.
Возьмем тот же С++, думаю, не будешь отрицать, что там работа с типами вообще очень сильно ограничена. А хочется. Почему хочется? Потому что это логично вытекает из парадигмы. Объекты, классы. Сохранили объект виртуальным методом в поток — а как восстанавливать? Нужна информация о типе.
Вот точно также и возможности, о которых мы тут говорим, вытекают из парадигмы. Да, они нужны чуть реже, без них обойтись, выкрутиться, проще, чем без Activator.CreateInstance. Но они очень логично и целостно вписываются в общую картину. Поэтому когда в одном языке эти возможности есть, а в другом — их нет, просто нет, это как минимум вызывает недоумение. ПОЧЕМУ их нет? И не говори, что они не нужны. Нужны.
Ты же постановил аксиомой — "в .net языках есть все, что нужно, кому этого мало — тот дурак".
Итак, я привел тебе два конкретных примера, когда мне хочется расширенной информации о типе на уровне языка — расскажи, как их "оптимально решать" в C#.
решения на Delphi примерно такие:
1. Передача типа — потомка заданного типа
type TControlClass = class of TControl;
procedure AddControl(ControlClass : TControlClass);
2. Извлечение информации о типе, специфичной для всех типов — подтипов заданного
// Базовый типtype DataSet = class(Component)
...
// Виртуальный член типаclass function GetDataSetName : string; virtual;
...
end;
// Ссылка на тип, производный от базового
TDataSetClass = class of TDataSet;
...
// Переменная ссылки на такой типvar DataSetClass : TDataSetClass;
....
// Извлечение информации о конкретном типе
ShowMessage(DataSetClass.GetDataSetName);
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, s.ts, Вы писали:
ST>>c, c++, matlab, clipper ( несколько ассемблеров и языков субд — не в счет ?) последний год/полтора — дельфи (турбо-паскаль в детском возрасте, видать, тоже не в счет ), далее, кажется, с#
ST>>перечислил только то, на чем больше года писал каждый день (ефстефстфенно, не в академических целях)
ST>>такие, млин, дела
VD>Возможно. Но то упорство с которым ты пытаешся получить отсуствующую и не нужную возможность наводит на мысли. Странно, что ты не потребовал множественного наследования, обработки формул в мат-виде, и изам-инструкций для управления БД.
а насчет нужности... хотелось бы иметь все... но за приемлемую цену и в приемлемые сроки... поэтому всего и нету в одном месте... на счет ненужности лучше не говорить, а то тут еще на 100 постов ветка вырастет
ST>>в общем, что бы ты не имел ввиду, опять пальцем в небо
VD>Ну, вот такой уж ты игрок в морской бой. Все вынуждаешь бить по площадям. А я как-то не очень люблю эту игру.
ладно, мир
уже суббота а я еще на работе
p.s. очередной раз предлагаю ввести правило, что участники обсуждений обходятся без взаимных оценок и ярлыков (мне что, теперь ник менять на "A1потопил"? ), а также не занимаются оценкой знаний друг друга (короче, следят за базаром ) — надоело читать "ты не знаешь/не понимаешь-сам не знаешь/не понимаешь"
Здравствуйте, Igor Trofimov, Вы писали:
iT>Замечательно. Как мне из его Type прочитать, сколько таблиц входит в этот typed DataSet и какие у них колонки? Создавать только для этого экземпляр я не хочу — это уродливо!
iT>Заметь, эта информация статична по отношению к конкретному типу датасета — она общая для всех его экземпляров. Хочется получить ее обобщенно из типа. Зная, что этот тип — подтип типа DataSet.
По моему это какая то ерунда. Если информация статична значит она в статик полях. Прочитать информацию из статик полей, не создавая экзепляра можно. Если же эта информация хранится таки в экземпляре значит эта информация не статична.
iT>Изврат — это создавать экземпляр объекта, чтобы получить информацию, общую для всех экземпляров, то есть информацию о типе.
Точно изврат. А нафига? Что это за информация такая, что экземпляр нужен?
iT>Никто не собирается ничего "эмулировать". Задачи, которые я приводил — вытекают не из возможностей Delphi или другого языка, где это есть, а из самой парадигмы ООП.
Вот и интересно что это за задачи такие. Предыдущий оратор на этот вопрос заявил что у него времени мало и ему работать нужно.
iT> И именно с отсутствующими возможностями они решались бы оптимальным способом, а не через задницу, как это приходится делать сейчас.
Что именно приходится делать через задницу?
iT>И вот, просто работая в рамках концепции ООП и возникают все эти задачки. iT>Возьмем тот же С++, думаю, не будешь отрицать, что там работа с типами вообще очень сильно ограничена. А хочется. Почему хочется? Потому что это логично вытекает из парадигмы.
Из парадигмы ООП? Ничуть. ООП не предполагает наличие неизвестных на стадии компиляции типов. Это уже другая парадигма — компонентная модель. А ее в С++ нет, не поддерживает он ее. Потому и метаданных нет.
iT>Вот точно также и возможности, о которых мы тут говорим, вытекают из парадигмы. Да, они нужны чуть реже, без них обойтись, выкрутиться, проще, чем без Activator.CreateInstance. Но они очень логично и целостно вписываются в общую картину. Поэтому когда в одном языке эти возможности есть, а в другом — их нет, просто нет, это как минимум вызывает недоумение. ПОЧЕМУ их нет? И не говори, что они не нужны. Нужны.
Вот и хотелось бы узнать зачем. Я как то ни разу потребности не испытал, хотя на Дельфи в свое время писал очень много.
iT>Ты же постановил аксиомой — "в .net языках есть все, что нужно, кому этого мало — тот дурак".
Нет конечно, ничего такого он не подразумевал. Просто когда говорят что что то нужно, потому что очень хочется, никак не обосновывая то естественно возникает вопрос — нафига?
iT>Итак, я привел тебе два конкретных примера,