powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Добавить атрибут программно
9 сообщений из 9, страница 1 из 1
Добавить атрибут программно
    #38542890
mabanza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.
Как в C# динамически добавить аттрибут, ну скажем, к строке? Или к object?

Пытаюсь делать что-то типа:

Код: c#
1.
2.
3.
4.
5.
object[] attributes = MyString.GetType().GetCustomAttributes(false);
                                    object[] newAttributes = new object[attributes.Length+1];
                                    for (int k = 0; k < attributes.Length; k++) newAttributes[k] = attributes[k];
                                    newAttributes[attributes.Length] = "hfghfgh";
                                    PropertyInfo pi =  MyString.GetType().GetProperty("CustomAttributes", BindingFlags.Public | BindingFlags.Instance);



Следующим шагом могло бы быть pi.SetValue(...), но pi=null.
Как это делается?
Спасибо.
...
Рейтинг: 0 / 0
Добавить атрибут программно
    #38542899
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mabanza,
add
...
Рейтинг: 0 / 0
Добавить атрибут программно
    #38542902
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mabanza, во-первых, атрибуты хранят информацию только для чтения. Во-вторых, эта информация назначается на этапе компиляции. В-третьих, атрибуты применяются к типу и для добавления атрибута к System.String или System.Object придется каким-то образом модифицировать код базовой библиотеки что не назовешь простой задачей. Проще говоря, то что ты пытаешься сделать невозможно. С какой целью ты это затеял?
...
Рейтинг: 0 / 0
Добавить атрибут программно
    #38542903
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи add
Упустил этот метод. Тем не менее задача странная.
...
Рейтинг: 0 / 0
Добавить атрибут программно
    #38542909
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile,
Да она не странная, просто редко встречаемая, например нужно замаркировать (откуда он и как получен) объект по коду, или еще что.
...
Рейтинг: 0 / 0
Добавить атрибут программно
    #38542931
mabanza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, TypeDescriptor. Очень хорошо.

>Тем не менее задача странная
Не, ну оно все странное. Зависит от круга решаемых проблем.
У меня есть самописный ORM, который мэпит члены класса к полям в БД. Ну, декларативно, конечно. Через атрибуты.
Надо заменить атрибут на лету. Вижу атрибут в коллекции, а изменить не могу. Обидно, слушай.
За TypeDescriptor спасибо, очень полезно.
...
Рейтинг: 0 / 0
Добавить атрибут программно
    #38544115
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиbazile,
Да она не странная, просто редко встречаемая, например нужно замаркировать (откуда он и как получен) объект по коду, или еще что.
Ну можно же в обьекте сделать обычное свойство для подобных "пометок"
....
...
Рейтинг: 0 / 0
Добавить атрибут программно
    #38544157
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129,
да можно, реализуйте интерфейс или отымейте базовый, многие так и поступают, есть еще масса вариантов кроме этого, это ж программирование - как Иван старший скажет..
...
Рейтинг: 0 / 0
Добавить атрибут программно
    #38544188
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По теме. Не забываем про Emit CustomAttributeBuilder (см. метод SetCustomAttribute)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Добавить атрибут программно
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]