![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
IRQ |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 7.5.2006 Репутация: нет Всего: нет |
Насколько я знаю в атрибутах параметры можно указывать только непосредственно. То есть скажем строковые параметры указываеются литералами. Мы можем написать [DisplayName("ABC")] и нельзя вместо ABC указывать всякие переменные. Можно-ли это как-нибудь обойти? Я пишу программу которая будет локализовываться. И было бы удобно вместо параметра атрибута в явном виде подставлять значние нужное. На нужном языке. Например из ресурсов. Возможно-ли это?
|
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Сорри что пропустил такой интересный вопрос. Так вот, ответ: нет
![]() Но не всё так плохо. Как известно, атрибуты не просто так объявляются над классами, переменными и т.п. Они ещё и используются где-то (иначе вообще смысла в них не было бы, правда?). Из этого следует замечательная вещь: то что мы не можем хранить в атрибутах вычисляемые значения (строки из ресурсов etc.), ещё не значит что мы не можем получать из атрибутов такие значения! Расшифрую: атрибут является классом. Мы определяем атрибут как класс-наследник System.Attribute. Атрибут принимает и хранит некие значения: 1) эти значения передаются в атрибут через конструктор или именованные свойства 2) далее они хранятся "as is" в метаданных сборки 3) далее, тот кто хочет получить данные из атрибута, вызывает x.GetCustomAttribute(ля-ля-ля), и получает оттуда требуемые данные, используя один из методов или свойств атрибута Теперь см. пункт 3: что мешает на этапе обращения к свойству атрибута (например, MyAttribute.SomeText) грузить данные из ресурсов и т.п. ? Всё что требуется для загрузки корректных данных - это инфа, переданная в атрибут и хранимая в метаданных сборки. То есть, к примеру можно передавать в конструктор атрибута идентификатор ресурса, а при обращении к свойству - грузить локализованный ресурс по идентификатору. Если нужен пример - приведу пример. -------------------- ![]() |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
||||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Пример:
Полностью проект: Присоединённый файл ( Кол-во скачиваний: 5 ) ![]() -------------------- ![]() |
|||
|
||||
IRQ |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 7.5.2006 Репутация: нет Всего: нет |
А можно такой же примерчик для DisplayName? Мне вот нужен этот атрибут и именно его значение надо менять. Это значит надо унаследоваться от DisplayNameAttribute и переопределить нужные методы и свойства?
Это сообщение отредактировал(а) IRQ - 7.12.2006, 14:59 |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
IRQ, всё то же самое только да, надо наследовать атрибут от DisplayNameAttribute и перекрывать св-во DisplayName - благо, оно виртуальное
![]() -------------------- ![]() |
|||
|
||||
IRQ |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 7.5.2006 Репутация: нет Всего: нет |
А ещё вопрос. Как сделать так чтобы не важно было какая культура. Я просто хочу сделать ресурс. и в нём хранить значения свои. И считывать их оттуда. Без всяких культур.
|
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Ну тогда достаточно держать в проекте единственный ресурс.
-------------------- ![]() |
|||
|
||||
IRQ |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 7.5.2006 Репутация: нет Всего: нет |
Э. Я не знаю как код переделать
![]()
У меня есть проект. Файл с классом моего атрибута находится внутри проекта но в отдельном файле. Я никак не могу заставить работать. Это сообщение отредактировал(а) IRQ - 7.12.2006, 22:48 |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Внимательнее надо быть.
Не будет работать по следующей причине: строка "MyDisplayName.Resource" должна указывать на полное имя ресурса (.resources) в сборке. Таким именем является namespace проекта плюс полная иерархия директорий внутри проекта, где находится файл ресурса, плюс имя самого файла ресурса (без расширения). То есть к примеру, если проект называется "CoolWindowsApplication", а ресурс Resource1.resx лежит в корневой директории проекта, тогда нужно передавать "CoolWindowsApplication.Resource1". Самый надёжный способ проверить, какое имя имеет каждый ресурс -- открыть скомпилированный exe/dll утилитой Reflector. -------------------- ![]() |
|||
|
||||
IRQ |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 7.5.2006 Репутация: нет Всего: нет |
Сейчас появилась необходимость подключать свой класс атрибута к разным сборкам. То есть хочется для удобства сделать отдельную библиотеку которкую можно подключать к разным сборкам и в них использовать мой атрибут. Как это реализовать? Видимо надо сделать конструктор с дополнительными параметрами. Не только ключ ресурса. Какие именно?
|
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |