powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как сделать, чтобы доступ к атрибутам был как к членам класса?
25 сообщений из 63, страница 2 из 3
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38145816
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Например, есть класс с атрибутами

Код: c#
1.
2.
3.
4.
5.
6.
[Display(Name = "Имя класса", Description = "Описание класса.")]
public class MyClass
{
	[Display(Name = "Имя свойства", Description = "Описание свойства.")]
	public int MyProperty { get; set; }
}




Хочу, чтобы доступ к значениям атрибутов был типа такого:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
string name = MyClass.Attributes.Display.Name;

MyClass myObject = new MyClass();

// далее или
string objectDescription = myObject.MyProperty.Attributes.Display.Description;

// или
string objectDescription = myObject.Attributes.MyProperty.Display.Description;




Т. е. состав коллекции Attributes должен зависеть от установленных атрибутов и значений их параметров.

Как сделать?

У меня соображение такое - для типов коллекция атрибутов должна быть статическим членом типа, а для экземпляров... не знаю какой. Для первого случае в моём коде получается какая-то обёртка над интовым свойством MyProperty, а для второго - просто коллеция Attributes, у которой атрибуты рассортированы в объекты с именами, совпадающими с именами свойств класса MyClass.

вы не совсем (или скорее всего совсем НЕ ) разобрались что вам нужно.
Метаданные нужны для кого, что бы получить информацию о классе в рантайме, при том что в дизайнтайме она неизвестна. Вы же зная все о классе в дизайнтайме зачем-то мутитесь с аттрибутами


МСУ"Проблема" надумана и высосана из пальца.

.NET дает возможность использовать атрибуты, есть варианты:
использовать их

не использовать их


совершенно согласен
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38145824
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pationрантайм / дизайнтайм
Чётко подмечено, +1
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38145838
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pationМетаданные нужны для кого, что бы получить информацию о классе в рантайме, при том что в дизайнтайме она неизвестна.Дизайнер умеет "лазить" в скомпилированные сборки текущего проекта.
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38145857
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ"Проблема" надумана и высосана из пальца.

.NET дает возможность использовать атрибуты, есть варианты:
использовать их

не использовать их

Т. е. вы согласны, что в Дотнете возможность устанавливать значения атрибутов реализована легко и удобно, а возможность считывать эти значения - трудно и неудобно?
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38145873
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320 ???
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38145879
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КpationМетаданные нужны для кого, что бы получить информацию о классе в рантайме, при том что в дизайнтайме она неизвестна.Дизайнер умеет "лазить" в скомпилированные сборки текущего проекта.
Я знаю - потому что я и дизайнер, и программист. А так я хотел вытащить данные из атрибутов модели в обычные данные модели представления. Столкнулся со сложностями - просто так фиг достанешь их. Точнее, достать-то можно, только хранить как и где, чтобы много кода не писать. Мне тут подсказали всякие штуки с дженериками - я пока их на уровне модели представления ещё не пробовал.
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38145883
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кuser7320 ???
Ну так там писать чего-то надо, чтобы вытащить значения, а чтобы их туда (в атрибуты) поместить, почти ничего писать не надо - квадратную скобку открыл, слово написал и давай значения забивать. Вот бы так и получать эти значения!
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38145890
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Алексей Кпропущено...
Дизайнер умеет "лазить" в скомпилированные сборки текущего проекта.
Я знаю - потому что я и дизайнер, и программист.Имеется в виду не человек, а редактор форм в Visual Studio.
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38145892
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Т. е. вы согласны, что в Дотнете возможность устанавливать значения атрибутов реализована легко и удобно, а возможность считывать эти значения - трудно и неудобно?
я, например, несогласен
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38145898
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилuser7320Т. е. вы согласны, что в Дотнете возможность устанавливать значения атрибутов реализована легко и удобно, а возможность считывать эти значения - трудно и неудобно?
я, например, несогласен Это должно решаться голосованием...
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38145915
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Ну так там писать чего-то надо, чтобы вытащить значения, а чтобы их туда (в атрибуты) поместить, почти ничего писать не надо - квадратную скобку открыл, слово написал и давай значения забивать. Вот бы так и получать эти значения!Что мешает вбить название поля сразу в XAML? Часто одного названия поля недостаточно. Оно может отличаться, если поле расположено в таблице, на форме редактирования, в детализации объекта и т. п.

"Овчинка выделки не стоит" (с)
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38145922
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320МСУ"Проблема" надумана и высосана из пальца.

.NET дает возможность использовать атрибуты, есть варианты:
использовать их

не использовать их

Т. е. вы согласны, что в Дотнете возможность устанавливать значения атрибутов реализована легко и удобно, а возможность считывать эти значения - трудно и неудобно?
И то и другое удобно и не вызывает никаких трудностей.
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38145924
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЧто мешает вбить название поля сразу в XAML?
Мешает его отсутствие. Вот у меня, к примеру, есть aspx, ascx, schtml. А xaml нету, в чем я не прав?
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38145928
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КЧто мешает вбить название поля сразу в XAML?
Мешает его отсутствие. Вот у меня, к примеру, есть aspx, ascx, schtml. А xaml нету, в чем я не прав? "У всех свои недостатки" (с)
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38146314
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилuser7320Т. е. вы согласны, что в Дотнете возможность устанавливать значения атрибутов реализована легко и удобно, а возможность считывать эти значения - трудно и неудобно?
я, например, несогласен
МСУuser7320пропущено...

Т. е. вы согласны, что в Дотнете возможность устанавливать значения атрибутов реализована легко и удобно, а возможность считывать эти значения - трудно и неудобно?
И то и другое удобно и не вызывает никаких трудностей.

Вот я устанавливаю значения атрибута:

Код: c#
1.
2.
3.
4.
5.
public class MyClass
{
	[Display(Name = "Имя свойства", Description = "Описание свойства.")]
	public int MyProperty { get; set; }
}



Как видите, я делаю это в одну строчку за - сколько там? - скажем, 60 символов. Вы сможете за 60 символов достать эти два свойства? Нет, вы будете писать рефлексивный код вида

Код: c#
1.
string s = Type.GetProperty(propName).GetCustomAttributes(bool, attrType).GetType().GetProperty(attrPropName).Name;



и это только для одного свойства одного атрибута.
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38146320
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь представьте, что вместо геттеров и сеттеров в классах вы бы писали все эти бесконечные GetProperty(string propertyName). Почему доступ к метаданным реализован не также удобно, как к данным объектов - через точку или там индекс?
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38146327
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Написать класс-хелпер с расширяющими методами под Ваши типовые задачи с атрибутами?
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38146389
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Теперь представьте, что вместо геттеров и сеттеров в классах вы бы писали все эти бесконечные GetProperty(string propertyName). Почему доступ к метаданным реализован не также удобно, как к данным объектов - через точку или там индекс?
Вы никуя не поняли
атрибуты в dotNet реализованы так, как должны быть реализованы,
вы же пытаетесь повесить на них функциональность статических свойств

читать вышенаписанное 10 раз перез сном, до полного просветления
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38146486
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кuser7320Написать класс-хелпер с расширяющими методами под Ваши типовые задачи с атрибутами?
Я вот, когда атрибуты задавал, ничего не писал расширяющего. А чтобы достать - расширять надо? - Фи.

pationuser7320Теперь представьте, что вместо геттеров и сеттеров в классах вы бы писали все эти бесконечные GetProperty(string propertyName). Почему доступ к метаданным реализован не также удобно, как к данным объектов - через точку или там индекс?
Вы никуя не поняли
атрибуты в dotNet реализованы так, как должны быть реализованы,
вы же пытаетесь повесить на них функциональность статических свойств

читать вышенаписанное 10 раз перез сном, до полного просветления
Да, хочу. Мне нужно к цифирям (инты там, даблы) приделать свойства (максимумы там, минимумы и прочие). А чтобы эти цифири остались цифирями и их было удобно использовать в расчётах (чтобы не писать как тут http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1003579&msg=13905106 ), я приделал к ним атрибуты, которые как бы не видно (а, значит, они не мешают), пока просто в расчётах используешь, но когда надо, я хочу быстро и удобно их получить - без всяких расширяющих и прочих конвертеров, а то я и сам могу понаписать... целый фреймворк могу понаписать, да.
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38146526
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Алексей Кпропущено...
Написать класс-хелпер с расширяющими методами под Ваши типовые задачи с атрибутами?
Я вот, когда атрибуты задавал, ничего не писал расширяющего. А чтобы достать - расширять надо? - Фи.Обиделся?
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38146543
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Как видите, я делаю это в одну строчку за - сколько там? - скажем, 60 символов. Вы сможете за 60 символов достать эти два свойства? Нет, вы будете писать рефлексивный код вида
И что дальше-то? Бери и проверяй рефилексией все свойства.
Код: c#
1.
IList<CustomAttributeData> data = typeof(Item).GetCustomAttributesData();


"Движок" пишется один раз (в виде хелпера или в виде расширения) и используется в программе по недобности.

С одной стороны ты хочешь динамику, причем с сотней различных по типу атрибутов. С другой стороны ты орёшь, что неудобно работать с такой разносолой динамикой. Извини, .NET не умеет гадать на кофе.

Ты определись с задачей, что конкретно (!) нужно для задачи, скорей всего у тебя с архитектурой затык. А то ты так неумело пытаешься понапридумывать всего и чтоб оно всё гладко решалось одной строчкой кода.
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38146544
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320целый фреймворк могу понаписать, да.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public static class ЛютыйФреймворк
{
    public static T GetAttribute<T>(this Type type, string propertyName)
        where T : Attribute
    {
        return type.GetProperty(propertyName)
            .GetCustomAttributes(typeof(T))
            .Cast<T>()
            .First();
    }
}
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38146585
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так полагаю, что следующим топиком от user7320 будет вопрос про динамическое изменение значений атрибутов во время исполнения программы.

PS. Вдруг локализация понадобится, а тут же все на атрибутах завязано.
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38146837
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ИМХО - попытки написать что-то универсальное, на все случаи жизни - детская болезнь в программизьме
...
Рейтинг: 0 / 0
Как сделать, чтобы доступ к атрибутам был как к членам класса?
    #38146854
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2, "имхо" можно смело вычеркивать.
...
Рейтинг: 0 / 0
25 сообщений из 63, страница 2 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как сделать, чтобы доступ к атрибутам был как к членам класса?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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