|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
hVostt Классы зачем генерить? )) Ну это уже не ко мне - мне их генерить незачем :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 03:14 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
Гадство, манипуляции с IL не нравятся антивирусам, нужно по-другому делать. Задача, значит, так стоит (упрощенно): есть расширение для IEnumerable<IData> (IData пустой, но может быть унаследован непустым интерфейсом), которое работает с ним через Reflection. Нужно подсунуть расширению IEnumerable с чем-то, реализующим IData, у чего набор свойств задается динамически так, чтобы Reflection их схавал. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 16:18 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 16:23 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
fkthat ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 16:24 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
Antonariy манипуляции с IL не нравятся антивирусам Это что еще за шляпа такая? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 16:24 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
Antonariy, А чем вообще самый тупейший рефлекшен не угодил? Там террабайты данных в реалтайм надо молотить что ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 16:25 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
fkthat Antonariy манипуляции с IL не нравятся антивирусам Это что еще за шляпа такая? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 16:27 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
fkthat Antonariy, А чем вообще самый тупейший рефлекшен не угодил? Там террабайты данных в реалтайм надо молотить что ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 16:30 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
Antonariy fkthat пропущено... Это что еще за шляпа такая? Программа: Authenticode(R) - signing and verifying tool Пользователь: user1 (Активный пользователь) Компонент: Защита от файловых угроз Результат: Обнаружено: HEUR:Trojan.MSIL.Crypt.gen Объект: C:\Users\user1\.nuget\packages\exceldna.addin\1.0.0.9\tools\ExcelDna.xll Причина: Машинное обучение Внутри этой xll тоже есть Emit, коллеге пришлось что-то поменять в исходниках (ExcelDna есть на гитхабе) и создать пакет с собственной сборкой, на которую каспер не ругается. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 17:01 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
Antonariy fkthat ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 17:25 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
Antonariy В каком смысле не угодил? Он и используется - берется модель и шерстятся свойства. Проблема возникает, когда модель неизвестна на этапе компиляции, когда ее свойства хранятся в базе, да еще по записям разных таблиц разбросаны. Ничего не понял. Рефлекшен как раз и дает возможность "шерстить модели", которые неизвестны на этапе компиляции. "Позднее связывание". ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 17:34 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
Antonariy Да и вообще дурь там какая-то написана. "Замените атрибутом". А ограничения на дженерики, а экстеншены как они думают на атрибуты вешать? Зачем тебе может понадобиться ограничение на то, что пусто? Это тоже самое, что ограничение на System.Object. Ограничения на дженерики нужны для того, чтобы потребовать от параметра дженерика исполнения какого-то контракта (например, иметь какие-либо методы/свойства, иметь конструктор по умолчанию, быть структурой и т.п.) Какой смысл требовать от параметра выполнения пустого контракта, который ни к чему его не контрактит? С екстеншенами тоже самое. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 17:39 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
Antonariy, Antonariy Да и вообще дурь там какая-то написана. "Замените атрибутом". А ограничения на дженерики, а экстеншены как они думают на атрибуты вешать? для этого существуют юнит-тесты ) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 17:47 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
Antonariy Гадство, манипуляции с IL не нравятся антивирусам, нужно по-другому делать. Задача, значит, так стоит (упрощенно): есть расширение для IEnumerable<IData> (IData пустой, но может быть унаследован непустым интерфейсом), которое работает с ним через Reflection. Нужно подсунуть расширению IEnumerable с чем-то, реализующим IData, у чего набор свойств задается динамически так, чтобы Reflection их схавал. В общем, тут иногда шумиха создаётся, когда говоришь людям -- делайте по уму сразу :) Ну так вот он -- яркий пример, когда кривые решения переросли в легаси, и людям приходится страдать и идти на неипические меры, чтобы простейшие вещи втулить :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 17:50 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
fkthat Antonariy Да и вообще дурь там какая-то написана. "Замените атрибутом". А ограничения на дженерики, а экстеншены как они думают на атрибуты вешать? Зачем тебе может понадобиться ограничение на то, что пусто? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 18:00 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
fkthat Antonariy В каком смысле не угодил? Он и используется - берется модель и шерстятся свойства. Проблема возникает, когда модель неизвестна на этапе компиляции, когда ее свойства хранятся в базе, да еще по записям разных таблиц разбросаны. Ничего не понял. Рефлекшен как раз и дает возможность "шерстить модели", которые неизвестны на этапе компиляции. "Позднее связывание". ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 18:03 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
hVostt Antonariy Гадство, манипуляции с IL не нравятся антивирусам, нужно по-другому делать. Задача, значит, так стоит (упрощенно): есть расширение для IEnumerable<IData> (IData пустой, но может быть унаследован непустым интерфейсом), которое работает с ним через Reflection. Нужно подсунуть расширению IEnumerable с чем-то, реализующим IData, у чего набор свойств задается динамически так, чтобы Reflection их схавал. В общем, тут иногда шумиха создаётся, когда говоришь людям -- делайте по уму сразу :) Ну так вот он -- яркий пример, когда кривые решения переросли в легаси, и людям приходится страдать и идти на неипические меры, чтобы простейшие вещи втулить :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 18:07 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
hVostt, По уму в данном случае нужно было использовать DataTable? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 18:15 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
Antonariy То, что пусто, само является ограничением. И что оно ограничивает? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 18:26 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
Antonariy hVostt, По уму в данном случае нужно было использовать DataTable? конечно ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 18:42 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
fkthat Antonariy То, что пусто, само является ограничением. И что оно ограничивает? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 23:44 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
ViPRos Antonariy hVostt, По уму в данном случае нужно было использовать DataTable? конечно ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 23:45 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
Antonariy hVostt, По уму в данном случае нужно было использовать DataTable? Не обязательно DataTable, я ж всей задачи не знаю и подробностей. Но да, во многих случаях подойдёт DataTable для динамических моделей данных. Такие вещи как IData, IEntity и т.п. вызывают очень скоро неминуемую протечку абстракции во все щели. Которые потом приходится затыкать рефлекией, эмитом и прочей хернёй. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2019, 02:53 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
Antonariy ну сравни this object и this IData. а еще Test<T> и Test<T> where T : IData. Давай сравним. И в чем отличие, если IData пустой? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2019, 05:13 |
|
Сконструировать через Emit класс, реализущий заданный интерфейс
|
|||
---|---|---|---|
#18+
fkthat Antonariy ну сравни this object и this IData. а еще Test<T> и Test<T> where T : IData. Давай сравним. И в чем отличие, если IData пустой? Если сделать расширение для object, то оно прилипнет ко ВСЕМ типам, где надо и где не надо, засирая интеллисенс. В дженерик без ограничений тоже оказывается возможным передать любой тип. А в реальной жизни и расширения и дженерики как правило все же рассчитаны на работу с ограниченным семейством типов. Это подсказки для разработчиков на уровне компилятора, что можно и что нельзя использовать в соответствующих методах. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2019, 07:55 |
|
|
start [/forum/topic.php?fid=20&msg=39900168&tid=1398687]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
145ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 254ms |
0 / 0 |