Здравствуйте, mihailik, Вы писали:
S>> Так как метаклассы уже созданы то мне легче засунуть туда их и создавать оттуда объекты.
M>Ну, это типичные фабрики классов. В Дельфи написать немножко проще, конечно, но не принципиально. По скорости вообще одинаково.
Здравствуйте, Serginio1, Вы писали:
S> Прошу прощения может быть ты абсолютно прав, или я ооочень плохо объясняю. S> Метаданные это суть класса такой же как и Type тот же синглтон. Со своими данными и виртуальными методами. Надеюсь ты не будешь отрицать это.
Буду. Type не синглтон.
S> Вот данные Type S>private InternalCache m_cachedData; S>А данные класса могут быть как статические, но они одинаковы для всех потомков и так и виртуальные одинаковые по структуре но разные по содержимому которые могут хранится в Type (он же и метакласс).
Что есть данные класса? Метаданные?
S> (про атрибуты уже наслышан). И это очень полезно когда работаешь с набором классов наследуемых от единого предка и имеющих виртуальное переопределение на уровне класса за что отвечают метаклассы.
Атрибуты неимеют никакого отношения к наследованию.
S> Может я плохо объясняю, но такой подход возможен и он полностью совместим с ООП.
Да. Постоянно персескакиваешь. Вот и сейчас. Перескачил на атрибуты и, похоже, обратно.
S> Еще раз повторюсь если метаданные буду введены в Type или получение ссылки на них будет в VMT
Type — это хэлпер-класс позволяющий получить метаданные от системы. Метаданные помещаются компилятором в сборки. В последствии система читает их, использует для своих нужд и редоставляет нам через Type.
S> Например в Нативном Delphi был бы сразы вызван статический виртуальные метод с отрицательным смещением.
И? Теперь все должны так делать?
S>Просто многого хочется. Чисто концептуально.
Это то понятно. Вот тлько не понятно чего.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, s.ts, Вы писали:
ST>ну... собственно, это нужно знать, как и синтаксис...
Нужно. К сажелению, нужно.
ST>сейчас почему-то считается, что не нужно знать даже синтаксис, который не используешь
Дело в том, что большинство популярных языков программирования имеют более-менее интуитивно понятный синтаксис и семантику. С++ в их числе. Большинству умных людей знакамых с другими языками программирования для того чтобы начать программировать на С++ достаточно изучить базовые принципы. Собствнно чтение Страуструпа и этим и является. Причем при изучении очень тяжело запомнить такие тонкие аспекты. Скорее всго средний человек не обратит на них особого внимания и быстро забудет. Так вот всячиские нелогичности сильно портят картину (да и жизнь в целом), так как нарушают принцип интуитивной понятности. В народе это называется граблями. С++ тем и плох, что для создания на нем качествнных приложений необходимо знать и постоянно помнить о куче граблей, а так же выполнять кучу джентельменских соглашений. В Шарпе как раз попытались избавить людей от макисмального количества граблей и сделать язык максимально интуитивно понятным. К сожалению, не во всем это им удалось на 100%-ов. Избавившись от серьезных граблей с невиртуальностью конструкторов они создали другие (возможность обращения к членам классов до их окончательной инициализации), однако на мой звгляд их выбор верен, так как на практике на подобного рода грабли наступить очень тяжело (уж больно они хорошо видны).
ST>на самом деле все связано: автоинициализация полей/автовызов конструктора предка/"невиртуальность виртуальных функций" это должно быть так, как в C++ или наоборот, третьего не дано
Всегда находится решение которое лучше предыдущих. Проблема только в том, что находится оно не всегда когда нужно, и не теми кому нужно.
ST>если, например, убрать "невиртуальность", то, чтобы граблей (настоящих, а не тех, что по незнанию) избежать, придется автоинициализацию вводить и т.д. — тут одно другое тянет
А неинициализированность переменных в С++ — это уже не грабли. Это стихийное бедствие. Так что это без вопросов нужно было делать.
ST>как раз-таки я цэ нахлебался и теперь очень рад той же дельфе, хотя изначально плевался и конструкторы базового класса забывал вызывать...
Я попрограммировал и на там, и на том достаточно. На дельфи явно меньше, да и не старался залезть в кишки, но все же 3 года отарабанил. С С++ уже около 10 лет вожусь. До этого еще на С пописал не мало (на нем и учился). И скажу честно, при всех недостатках С++ он мне нравится больше. Ведь по количеству граблей дельфи и С++ почти идентичны, а фунционально С++ бокаче (если не считать отсуствия встроенной в язык компонентной поддрежки).
ST>ага (выше я то же самое писал), а можно было не делать автоинициализацию, но убрать автовызов базового конструктора. и потом (как си плюсплюсники) кричать, что это дает могучую эффективность создаваемых приложений при "совсем небольшом ручном кодировании"
Т.е. можно было собрать все грабли дельфи? Можно конечно, но глупо.
Ребята нашли паллиатив.
ST>проблемы-то все равно будут, но они легко обходятся (в дельфе даже есть спецовый флажок в ComponentState под названием csDestroying) всякими там флажками, да декомпозицией
Да нет проблем. Вернее возможно они и есть, но совсем гипотетические. За все время существования Шарпа и дотнета я ни разу не видел, чтобы кто-то наступил на эти грабли. А вот на грибли С++ и дельфи связанные с кострукторами наступают постоянно и основательно.
ST>да нет, дело привычки (см. выше)
Вот чем меньше привычек нужно для создания надежного ПО, тем лучше.
ST>но если приходится часто переключаться между языками, где все по-разному, то да...
В любом случае. Доказано на практике. Сделай поиск по Мастаку и по рсдн и убедись, что эти грабли есть в дельфи и С++ и отсуствуют в Шарпе.
ST>я вот вечно с индексацией массивов путался, а после долгописания на паскале еще и с операторами присваивания/сравнения. хорошо, что шарп это сечет четко. а вот в сях — фигня выходит ... мнда...
Одно дело путаться (на то есть компилятор), а другое дело отложенные, замаскированные ошибки.
ST>p.s. кстати, "самым безответственным и ненадежным компонентом" моей системы оказался борланд со своим кликсом
Ну, всегда можно спихнуть свои проблемы на кого-то. Каликс ведь ты сам выбрал. Кто тебе мешал взять С++ и проверенные библиотеки? Ты же знал, что Каликс совершенно новый продукт.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Lloyd, Вы писали:
L>>Тебе чего-то доказывать? Низачто. Ты же фанатик, тебя аргументы не пронимают.
VD>В отличии от действительно фанатиков и таких как ты я прекрасно воспринимаю обоснованные аргументы.
Во всем этом флейме я вставил только одну реплику -- то что в питоне есть класметоды. На что ты заявил, что питона не знаешь, но, тем не менее, знаешь, что это сплошной тормознутый глюко-баг. Где именно в твоем ответе проявилось мое неприятие аргументов?
Количество твоих сообщений, напротив, в десятки раз превосходит количество моих. Поэтому у меня, в отличие от тебя, у меня большая фактологическая база, на основании которой я смог сделать мнение о тебе, как, еще раз повторюсь, о клоуне и фанатике.
VD>А говоришь эти гадости ты потому что знаешь, что ты не прав.
Могу я поинтересоваться, в чем конкретно я был неправ? Неужели в питоне нет класметодов?
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Serginio1, Вы писали:
S>> Прошу прощения может быть ты абсолютно прав, или я ооочень плохо объясняю. S>> Метаданные это суть класса такой же как и Type тот же синглтон. Со своими данными и виртуальными методами. Надеюсь ты не будешь отрицать это.
VD>Буду. Type не синглтон.
А что же. То есть GetType одинакового типа не возвращает одну и туже ссылку????
И для кажлого GetType и TypeOf создается свой объект???
S>> Вот данные Type S>>private InternalCache m_cachedData; S>>А данные класса могут быть как статические, но они одинаковы для всех потомков и так и виртуальные одинаковые по структуре но разные по содержимому которые могут хранится в Type (он же и метакласс).
VD>Что есть данные класса? Метаданные?
Например Аттрибут решает задачу хранения данных класса, но доступ к нему не оочень быстр, при кэшировании этих данных мы опять возвращаемся к синглтону ассоциированному с этим типом, но доступ к нему возможен через переменные или Хэштаблицу, что согласись не очень удобно. Но например иерархия классов и структура данных их одинакова. И эту информацию мы можем хранить в метаклассе.А ссылку на них в VMT класса.С каждым классом может ассоциироваться только один метакласс. И здесь мы имеем доступ к данным класса, полиморфизм и быстрый доступ.
S>> (про атрибуты уже наслышан). И это очень полезно когда работаешь с набором классов наследуемых от единого предка и имеющих виртуальное переопределение на уровне класса за что отвечают метаклассы.
VD>Атрибуты неимеют никакого отношения к наследованию.
Не совсем так. Так как я могу для каждого класса иерархии определять один и тотже аттрибут только с разными значениями.
S>> Может я плохо объясняю, но такой подход возможен и он полностью совместим с ООП.
VD>Да. Постоянно персескакиваешь. Вот и сейчас. Перескачил на атрибуты и, похоже, обратно.
Просто аттрибуты являются данными класса, о которых ты спрашивал.
S>> Еще раз повторюсь если метаданные буду введены в Type или получение ссылки на них будет в VMT
VD>Type — это хэлпер-класс позволяющий получить метаданные от системы. Метаданные помещаются компилятором в сборки. В последствии система читает их, использует для своих нужд и редоставляет нам через Type.
Чем при этом отличается метакласс (гипотетически конечно, так как его нет в Net),
только тем что может предоставлять еще и пользовательские данные и методы ???
Пусть живут паралельно с Type, но являются пользовательской сущностью класса. S>> Например в Нативном Delphi был бы сразы вызван статический виртуальные метод с отрицательным смещением.
VD>И? Теперь все должны так делать?
Да нет. Просто дельфевая парадигма безболезненно прожила лет 10 и доказала свою состоятельность. Но никто ни кого не заставляет.
Удобство от применения метаданных для меня лично неоспорима, но интегрированной на уровне Net, а не как сейчас через пользовательские синглтоны привязанные к классам. Кустарщина.
S>>Просто многого хочется. Чисто концептуально.
VD>Это то понятно. Вот тлько не понятно чего.
Метаклассов.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, s.ts, Вы писали:
ST>как можно попроще реализовать статические виртуальные методы для класса (не городя фабрик и т.п.) на С# ? ST>поделитесь плз. у кого какие идеи по этому поводу ?
ST>вообще как это должно выглядеть по-нормальному ?
всё... фянита-ля-комедия... наконец оно съехало в священные войны!
вот вам и рука бойца...
теперь то хоть знать буду в чём заключается C# vs. other
Здравствуйте, Lloyd, Вы писали:
L>Во всем этом флейме я
Ну, ты не только в это флэйме...
L> вставил только одну реплику -- то что в питоне есть класметоды. На что ты заявил, что питона не знаешь, но, тем не менее, знаешь, что это сплошной тормознутый глюко-баг.
Не ври. О глюках я вообще ничего не говорил. Я только сказал, что он не выдержит конкуренции с полноценными оптимизирующеми компиляторами.
L> Где именно в твоем ответе проявилось мое неприятие аргументов?
В хамстве, я пологаяю...
L>Количество твоих сообщений, напротив, в десятки раз превосходит количество моих. Поэтому у меня, в отличие от тебя, у меня большая фактологическая база, на основании которой я смог сделать мнение о тебе, как, еще раз повторюсь, о клоуне и фанатике.
Чтобы понять твою суть тебе достаточно было просто открыть рот.
VD>>А говоришь эти гадости ты потому что знаешь, что ты не прав.
L>Могу я поинтересоваться, в чем конкретно я был неправ? Неужели в питоне нет класметодов?
Да у тебя еще и со зрением проблемы.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Serginio1, Вы писали:
S> А что же. То есть GetType одинакового типа не возвращает одну и туже ссылку????
Не обязаню. Но дело не в этом. Дело в том, что есть море разных экземпляров типа Type.
S> Например Аттрибут решает задачу хранения данных класса,
Это называется метаданными. Т.е. данные описывающие класс, а не принадлежащие ему.
S> но доступ к нему не оочень быстр,
С чего ты это взял? Это коллекция объектов от других ничем не отличается.
S> при кэшировании этих данных мы опять возвращаемся к синглтону ассоциированному с этим типом, но доступ к нему возможен через переменные или Хэштаблицу, что согласись не очень удобно.
Ты сам себе что-то придумываешь и предлагаешь мне с этим соглашаться?
S> Но например иерархия классов и структура данных их одинакова. И эту информацию мы можем хранить в метаклассе.А ссылку на них в VMT класса.С каждым классом может ассоциироваться только один метакласс. И здесь мы имеем доступ к данным класса, полиморфизм и быстрый доступ.
Зачем? Доступ тоже быстрее не станет. Интерпретация она и в фарике интерпретакция.
VD>>Атрибуты неимеют никакого отношения к наследованию. S> Не совсем так. Так как я могу для каждого класса иерархии определять один и тотже аттрибут только с разными значениями.
С тем же успехом ты можешь сделтаь это для любого другого класса.
S> Просто аттрибуты являются данными класса, о которых ты спрашивал.
Я спрашивал?
S> Чем при этом отличается метакласс (гипотетически конечно, так как его нет в Net), S>только тем что может предоставлять еще и пользовательские данные и методы ???
Нет. Атрибуты прекрасно позволяют расширять метаинформацию. Метаклассы дельфи это просто другая реализация. Причем во много более ограниченная и ре предоставляющая всех возможностей что дает ЦЛР.
S> Пусть живут паралельно с Type, но являются пользовательской сущностью класса.
Создай себе класс и делай с ним все что хочешь.
S> Да нет. Просто дельфевая парадигма безболезненно прожила лет 10 и доказала свою состоятельность.
И по прошествии 10 лет мирно скончалась. (это я о переходе на дотнет).
S> Удобство от применения метаданных для меня лично неоспорима, но интегрированной на уровне Net, а не как сейчас через пользовательские синглтоны привязанные к классам. Кустарщина.
Вот сейчас все в порядке. Не говоря уже о выдумку про какие-то синглтоны.
S> Метаклассов.
Т.е. просто чтобы были? На фиг не упали, но приятно... Так что ли?
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, s.ts, Вы писали:
M>>Ну, это типичные фабрики классов. В Дельфи написать немножко проще, конечно, но не принципиально. По скорости вообще одинаково.
ST>ура! мы прозреваем
Т.е. все же изначально была нужна фабрика классов и я был прав на счет активатора?
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Lloyd, Вы писали:
L>>Во всем этом флейме я
VD>Ну, ты не только в это флэйме...
Я польщен. Оказывается, я меня есть поклонники в этом форуме. А кстати в каком еще флейме я тебе успел насолить?
L>> вставил только одну реплику -- то что в питоне есть класметоды. На что ты заявил, что питона не знаешь, но, тем не менее, знаешь, что это сплошной тормознутый глюко-баг.
VD>Не ври. О глюках я вообще ничего не говорил. Я только сказал, что он не выдержит конкуренции с полноценными оптимизирующеми компиляторами.
Да, конечно не выдержит, не вопрос. Так же как и полноценные оптимизирующие компиляторы не выдержат конкуренции со скриптовыми языками в соответствующей нише. Я разве утверждал противоположное? Ты спросил где есть класметоды, кроме делфы, я ответил. А ты сразу в истерику, как будто кто-то трогает C#.
L>> Где именно в твоем ответе проявилось мое неприятие аргументов?
VD>В хамстве, я пологаяю...
Ответ в три слова, из них два -- это класметод и питон. Ты видимо читаешь между строк. Завязывай с этой экстрасенсорикой.
L>>Количество твоих сообщений, напротив, в десятки раз превосходит количество моих. Поэтому у меня, в отличие от тебя, у меня большая фактологическая база, на основании которой я смог сделать мнение о тебе, как, еще раз повторюсь, о клоуне и фанатике.
VD>Чтобы понять твою суть тебе достаточно было просто открыть рот.
Опять не понимаю ничего в твоих формулировках.
Кому понять? Мне? Так мне для этого и рта открывать не надо.
Тебе -- аналогично, ты же у нас, как выяснилось, без пяти минут колдун.
VD>>>А говоришь эти гадости ты потому что знаешь, что ты не прав.
L>>Могу я поинтересоваться, в чем конкретно я был неправ? Неужели в питоне нет класметодов?
VD>Да у тебя еще и со зрением проблемы.
Видимо, да. Если не сложно, объясни пожалуйста, где с моей стороны было хамство.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, s.ts, Вы писали:
VD>Ну, всегда можно спихнуть свои проблемы на кого-то. Каликс ведь ты сам выбрал. Кто тебе мешал взять С++ и проверенные библиотеки? Ты же знал, что Каликс совершенно новый продукт.
у меня ситуация несколько иная:
к сожалению, не я выбирал, а те, кто, в общем-то, и программ не писал и кругозора не имеет (исходя чисто из маркетинговых сображений )
вообще с моим мнением стали считаться, только когда выяснилось, что систему за пару месяцев силами нескольких студентов (которые еще и разбегаются ) не написать
все равно в данный момент на vcl все переводим, но кое-какое наследие всеравно останется (типа каких-то левых скриптовых движков вместо WSH и др.)
со всем остальным, что ты сказал, наконец-то , могу согласиться
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Serginio1, Вы писали:
S>> А что же. То есть GetType одинакового типа не возвращает одну и туже ссылку????
VD>Не обязаню. Но дело не в этом. Дело в том, что есть море разных экземпляров типа Type.
Читаем Рихтера "При первом обращении к некоторому типу из AppDomain CLR создает экземпляр RuntimeType
и инициализирует его поля данными, отражающими сведениями о типе.
"Поскольку в AppDomain для каждого типа существует только один объект RuntimeType
то можно сравнивать o1.GetType==o2.GetType.
Причем не проверял, но ссылка на него должна прописываться в VMT с отрицательным смещением.
S>> Например Аттрибут решает задачу хранения данных класса,
VD>Это называется метаданными. Т.е. данные описывающие класс, а не принадлежащие ему.
S>> но доступ к нему не оочень быстр,
VD>С чего ты это взял? Это коллекция объектов от других ничем не отличается.
Читаем Рихтера
" Когда компилятор обнаруживает применение специализированного атрибута, он создает экземпляр атрибутного типа, вызывая его конструктор и передавая ему указанные параметры. Затем вомпилятор инициализирует указанные открытые поля и свойства. Затем он его сериализует и сохраняет в метаданных.
GetCustomAttribute Возвращает экземпляр атрибутного типа применяемого к данной сущности. Этот экземпляр создается (десиреализутся) используя поля и свойства, указанные при компиляции.
Если вас волнует быстродействие рассмотрите возможность кэширования результатов".
Что подтверждает и AWK. S>> при кэшировании этих данных мы опять возвращаемся к синглтону ассоциированному с этим типом, но доступ к нему возможен через переменные или Хэштаблицу, что согласись не очень удобно.
VD>Ты сам себе что-то придумываешь и предлагаешь мне с этим соглашаться?
S>> Но например иерархия классов и структура данных их одинакова. И эту информацию мы можем хранить в метаклассе.А ссылку на них в VMT класса.С каждым классом может ассоциироваться только один метакласс. И здесь мы имеем доступ к данным класса, полиморфизм и быстрый доступ.
VD>Зачем? Доступ тоже быстрее не станет. Интерпретация она и в фарике интерпретакция.
Почему это не станет. Причем здесь Интерпретация. Я тебе говорю о хранении данных в метаклассе и вызове его виртуальных методов. VD>>>Атрибуты неимеют никакого отношения к наследованию. S>> Не совсем так. Так как я могу для каждого класса иерархии определять один и тотже аттрибут только с разными значениями.
VD>С тем же успехом ты можешь сделтаь это для любого другого класса.
S>> Просто аттрибуты являются данными класса, о которых ты спрашивал.
VD>Я спрашивал?
" Что есть данные класса? Метаданные? " S>> Чем при этом отличается метакласс (гипотетически конечно, так как его нет в Net), S>>только тем что может предоставлять еще и пользовательские данные и методы ???
VD>Нет. Атрибуты прекрасно позволяют расширять метаинформацию. Метаклассы дельфи это просто другая реализация. Причем во много более ограниченная и ре предоставляющая всех возможностей что дает ЦЛР.
Основанные на рефлексии. Возвращаемся к твоей любимой Интерпретации.
S>> Пусть живут паралельно с Type, но являются пользовательской сущностью класса.
VD>Создай себе класс и делай с ним все что хочешь.
Спасибо, больше мне ничего и не остается. А хотелось бы работать с метаклассами и вызывать его методы и данные как непосредственно из метакласса например при передачи параметом как тип базового класса метакласса. S>> Да нет. Просто дельфевая парадигма безболезненно прожила лет 10 и доказала свою состоятельность.
VD>И по прошествии 10 лет мирно скончалась. (это я о переходе на дотнет).
С теми же метаклассами. И все что ты мне предлаешь там реализовано, но не на том уровне. S>> Удобство от применения метаданных для меня лично неоспорима, но интегрированной на уровне Net, а не как сейчас через пользовательские синглтоны привязанные к классам. Кустарщина.
VD>Вот сейчас все в порядке. Не говоря уже о выдумку про какие-то синглтоны.
S>> Метаклассов.
VD>Т.е. просто чтобы были? На фиг не упали, но приятно... Так что ли?
Объясняю в последний раз.
Берем 1С. Там кстати неплохая работа с метаданными. Правда на нормальном уровне появилась только в 7.7 но помогает очень хорошо.
Вот есть базовый тип причем данные метакласса можно выразить как
TypeID, BaseType, Представление итд (BaseType это число, справочник, документ ...)
Кроме того существуют методы
Дефолтный конструктор, метод визуального редактирования итд.
Например документ содержит коллекцию полей шапки и строчной части. И это все информация метаклассов.
Но доступ к ней я могу получить как из типа, так и из объекта. Это нужно когда имеем объект неопределенного типа вернее базового типа а по нему нужно определить тип, его визуализацию, редактирование итд.
Так же быстрое исследование типа, но типизированное и в том виде в котором мне нужно.
И создание типизированных гридов основанных данных метаклассов итд. Наверное AWK это ближе.
На данном этапе, для каждого класса отдельно создается свой метакласс который отдельно переопределятся как наследник от базового метакласса и так идет паралельно редактирование инициализация итд. Правда в Delphi я могу применять виртуальные статические методы, что облегчает доступ к метаклассом и полиморфизм, но сама реализация как это сделано в Net не очень нравится.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S> Причем не проверял, но ссылка на него должна прописываться в VMT с отрицательным смещением.
Тебя прям на отрицательном смещении клинит. Нафига оно там? В отличие от дельфи дотнету никакой бинарной совместимости соблюдать не надо. Ссылка на VMT в указателе есть. Скорее всего там обычная хеш таблица с экземплярами.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Serginio1, Вы писали:
S>> Причем не проверял, но ссылка на него должна прописываться в VMT с отрицательным смещением.
AVK>Тебя прям на отрицательном смещении клинит. Нафига оно там? В отличие от дельфи дотнету никакой бинарной совместимости соблюдать не надо. Ссылка на VMT в указателе есть. Скорее всего там обычная хеш таблица с экземплярами.
А проверить????
Во всяком случае у тогоже Рихтера в статье по синхронизации за январь в MSDN, инфомация о типе указана с отрицательным смещением в VMT.
и солнце б утром не вставало, когда бы не было меня
iT>>Оттуда же, откуда ты написал бы атрибут DataTableCountAttribute со значением 10. Конкретный тип знает это про себя.
VD>Тогда уж нет особых проблем создать базовый тип атрибута разместить все что нужно в нем. А потом создать мелкий хэлпер который вынет тебе нужную информацию.
Влад, ты попадаешься на ту же удочку, на которую и Serginio. Маньячишь по какому-то конкретному средству, забывая о цели.
Атрибутами-то можно всё разместить, но со статической виртуальностью было бы объективно удобнее.
AVK>>>Пока что твой код абсолютно бессмысленен с практической точки зрения.
iT>>) Ну это же пример. Ты всегда критикуешь за практическую неприменимость примеры подходов?
AVK>Тебя просили задачу, а ты привел бессмысленный с практической точки зрения код.
Ну, не передёргиваем!
Между прочим, Андрей, саму задачу мы уже видели, и некоторые даже отказались её решать.
iT>Да я согласен, что это не панацея Я просто утверждаю, что в каких-то случаях это реально полезная концепция, стройная и естественным образом вытакающая из возможности хоть как-то работать с типами.
Абсолютно согласен.
iT>Да, атрибутами можно сделать гибче. Но далеко не всегда проще, удобнее, быстрее и надежнее. И что жаль, что такого механизма нет в clr — он бы никому не помешал, а только помог бы.
А здесь однозначно нет.
Дотнет — сбалансированная платформа, на проектирование которой потрачены ох&енные деньги. Если здесь чего-то не прикрутили, значит эта фича вызвала бы проблемы.
Любая виртуальность это оверхед. Мы знаем, какие казуистические навороты происходят вокруг типов в ремотинге, в COM-интеропе, при вызове интерфейсов. Здесь всё посчитано.