|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Например, есть класс с атрибутами Код: c# 1. 2. 3. 4. 5. 6.
Хочу, чтобы доступ к значениям атрибутов был типа такого: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
Т. е. состав коллекции Attributes должен зависеть от установленных атрибутов и значений их параметров. Как сделать? У меня соображение такое - для типов коллекция атрибутов должна быть статическим членом типа, а для экземпляров... не знаю какой. Для первого случае в моём коде получается какая-то обёртка над интовым свойством MyProperty, а для второго - просто коллеция Attributes, у которой атрибуты рассортированы в объекты с именами, совпадающими с именами свойств класса MyClass. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 15:43 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320, "Как сделать... как к членам класса" - ну и сделайте "членами класса", что мешает? зачем вообще связываться с атрибутами, в чем необходимость? ps. если бы у бабушки были яйца, она бы точно была дедушкой (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 16:02 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
LRuser7320, "Как сделать... как к членам класса" - ну и сделайте "членами класса", что мешает? зачем вообще связываться с атрибутами, в чем необходимость? ps. если бы у бабушки были яйца, она бы точно была дедушкой (с) Так я же объяснял (в других темах), что я не могу придумать унивресальную обёртку над интовыми (дабловыми и прочими) типами. Т. е. не могу придумать класс, который бы принимал объект любого типа и превращал бы его в объект нужного типа. Вот, пишу как члены класса, вместо атрибутов double myValue; string myValueName; string myValueDescription; double myValueMax; double myValueMin; Видите, жирным выделил - это у меня дабл. А я хочу, чтобы был любой тип. Мне придётся столько классов сделать, сколько типов я хочу использовать в такой конструкции. И если даже последние четыре свойства можно вынести в базовый класс, наследуемых классов всё равно будет по числу типов. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 16:15 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Вместо дабла в выделенном поле должен стоять некий неопределённый тип. Тип должне определиться, когда я классу в, например, конструктор пошлю параметр (инт там, или дабл, или даже ссылочный тип). И после этого это значение уже должно во всех расчётах и в Интеллисенсе быть того типа, который я ему присвоил через параметр конструктора. Во как я хочу. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 16:21 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Nullable<T> не подходит, потому что он либо конкретный nullable (int?, нпример), либо неопределённый Nullable<T>, который надо при использовании в расчётах постоянно приводить к нужному типу. object - то же самое - надо приводить постоянно (распаковка для типов значений). C dynamic, мне кажется, тоже не прокатит, т. к. разве можно интенсивно использовать эти дайнэмики в математических расчётах? Я же знать не буду, что с чем использую и что где получаю. Да и Интеллисенс работать не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 16:26 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320, Вы бы сформулировали свою задачу на каком-то конкретном примере, а то, например мне, после нескольких Ваших тем, так и не понятно чего Вы в конце концов добиваетесь...((( ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 16:30 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Вообще, кто-нибудь использовал dynamic в расчётах, в которых все переменные - инты, даблы, флоаты и прочие - заменены на эти дайнэмики? Ну и как, нормально получалось? Я сейчас попробовал - можно и в индексы массива дайнэмики пихать, даже не приводя к типу int. Только такие расчёты чреваты ошибками - ведь проверки на типы во время редактирования кода и компиляции нет. Т. е. мне придётся смириться с этим, чтобы осуществить то, что я хочу? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 16:38 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
LRuser7320, Вы бы сформулировали свою задачу на каком-то конкретном примере, а то, например мне, после нескольких Ваших тем, так и не понятно чего Вы в конце концов добиваетесь...((( У меня простая задача и я недоумеваю, почему ни у кого ничего подобного не возникало и никто не может нормально ответить. Задача: есть настройки в виде чисел разных типов (даблы, инты и прочие). Эти настройки сгруппированы в группы настроек. Каждая группа - отдельный тип: Settings1, Settings2 и т. д. Все группы собраны под общим типом Settings. Далее. К каждой настройке есть такие данные: название настройки (локализованное - берётся из ресурсов), описание найстроки (тоже локализованное), максимальное и минимальное допустимые значения и другие. К каждой группе настроек тоже есть название и описание. Вроде, всё привычно? У каждого такое было? Я бы даже сказал, почти в каждом первом стандартном проекте, да? Я спросил (давно уже было), как это всё легче организовать. Мне сказали, что все эти свойства настроек - это метаданные этих настроек, посему их надо в атрибуты. Я так и сделал. Настройки, значит, это у меня модель. Сами значения настроек используются в расчётах в модели, а их значения устанавливаются в интерфейсе через модель представления. Свойства же настроек (названия, описания) показывются тоже в модели представления. Значения и пределы значений настроек байндятся к контролам в представлениях. Всё просто - каждый первый случай такой, да? Я НЕ ПОНИМАЮ - разве никто с этим не сталкивался? Почему нет стандартного способа решения? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 16:44 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
авторСвойства же настроек (названия, описания) показывются тоже в модели представления Они тоже байндятся к контролам представления, только без возможности редактирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 16:46 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Итого - в модели есть атрибуты, а через модель представления в представлениях надо значения из этих атрибутов показать. Я пробовал с конвертерами - молучилось. Но слишком многословн - ближе к началу темы http://www.sql.ru/forum/actualthread.aspx?tid=1002838 и http://www.sql.ru/forum/actualthread.aspx?tid=1000065 Потом вы уже, LR, подсказали, что проще хранить все значения атрибутов в коллекции и вызывать их своей нотацией. За что вам болшое спасибо - код упростился значительно и вся обслуга убралась в базовый класс, разгрузилась разметка. Но и этого мне показалось мало. Почему, в конце-концов, я должен какие-то костыли придумывать?! Хочу, чтобы доступ к атрибутам был такой же удобный, как и к свойствам обычных объектов! Например, через точку. Вот и вся история. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 16:52 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320Мне сказали, что все эти свойства настроек - это метаданные этих настроек, посему их надо в атрибуты. Я так и сделал. Настройки, значит, это у меня модель. Сами значения настроек используются в расчётах в модели, а их значения устанавливаются в интерфейсе через модель представления. имхо, такие "метаданные" есть ничто иное как данные, посему их не надо в атрибуты... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 16:56 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Извиняюсь за неточность, и плохо, что здесь нельзя редактировать старые посты. Вобщем, код доступа к данным атрибутов в первом посте неправильный. На самом деле я хочу что-то типа такого: Код: c# 1. 2. 3. 4. 5. 6.
О как! Т. е. я хочу код, который автоматом заполнит статические поля-коллеции (или как там лучше организовать это) MyClass.Attributes и MyClass.Properties с нужными мне данными. При этом имена этих полей и имена вложенных в них полей, типа Display, Name и прочих, должны совпадать с составом свойств, атрибутов и свойств атрибутов для данного класса. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 17:08 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
LRuser7320Мне сказали, что все эти свойства настроек - это метаданные этих настроек, посему их надо в атрибуты. Я так и сделал. Настройки, значит, это у меня модель. Сами значения настроек используются в расчётах в модели, а их значения устанавливаются в интерфейсе через модель представления. имхо, такие "метаданные" есть ничто иное как данные, посему их не надо в атрибуты... Если не в атрибуты, то вариант остаётся только в класс-обёртку. Или в базовый класс. Но тогда в любом случае в классе-обёртке должно быть поле, отвечающее за хранение самого значения настройки. А проблема в том, что это значение может быть одного из нескольких типов. Т. е. придётся столько обёрток делать, сколько типов настроек я хочу хранить. Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 17:11 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320Или в базовый класс. чем плохо в базовый класс? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 17:17 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
LRuser7320Или в базовый класс. чем плохо в базовый класс? А как САМО значение настройки хранить? Вот так? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 17:24 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Только настроек у меня 50 штук. 50 штук классов - лучше с атрибутами маяться тогда уж. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 17:26 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Да, кстати, базовых классов тоже надо много - там максимум и минимум должны быть того же типа, что и само значение. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 17:27 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320, для таких случаев можно использовать дженерики Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 17:58 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
LRuser7320, для таких случаев можно использовать дженерики Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
А как использовать это в расчётах и как повлияет это на производительность? Например, Код: c# 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 19:20 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Если я правильно понял задачу топикстартера, то вот вариант решения: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 20:58 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320Например, ну и что? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 01:12 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
LRuser7320Например, ну и что? Это как минимум многословно и неудобно набирать. По мне, так при расчётах, когда уже прошли все валидации, лучше создать иерархию подклассов без этой обвески в виде доп. параметров - оставить только значения. И с ними уже считать. Чтобы вместо Object.Subobject.Subobject.a было просто а. Но тогда уже с обвеской что мы имеем: сначала загоняем в обвеску - куча кода, а потом выводим из неё - куча кода. Получается, что кода не меньше, чем при атрибутах или конвертерах. Меня атрибуты устраивали - удобный и компактный способ "приписать" данные к данным. Меня только не устраивает, как муторно к ним иметь доступ. Почему создатели фреймворка до сих пор не придумали удобный способ? И чтобы привязки работали. Вобщем, проблема только в том, что приходится самому кодить код-обслугу для такого доступа. И самодельный доступ получается какой-то "не нативный", а костыльный. А так я в атрибутах ничего плохого не вижу. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 05:25 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Вообще, непонятно, зачем помещать что-то в атрибуты, если достать что-то оттуда и привязаться к этому - лучше убиться? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 05:27 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320удобный и компактный способ "приписать" данные к данным. исполизуй короткий термин - метаданные ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 09:19 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
"Проблема" надумана и высосана из пальца. .NET дает возможность использовать атрибуты, есть варианты: использовать их не использовать их ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 09:41 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320Например, есть класс с атрибутами Код: c# 1. 2. 3. 4. 5. 6.
Хочу, чтобы доступ к значениям атрибутов был типа такого: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
Т. е. состав коллекции Attributes должен зависеть от установленных атрибутов и значений их параметров. Как сделать? У меня соображение такое - для типов коллекция атрибутов должна быть статическим членом типа, а для экземпляров... не знаю какой. Для первого случае в моём коде получается какая-то обёртка над интовым свойством MyProperty, а для второго - просто коллеция Attributes, у которой атрибуты рассортированы в объекты с именами, совпадающими с именами свойств класса MyClass. вы не совсем (или скорее всего совсем НЕ ) разобрались что вам нужно. Метаданные нужны для кого, что бы получить информацию о классе в рантайме, при том что в дизайнтайме она неизвестна. Вы же зная все о классе в дизайнтайме зачем-то мутитесь с аттрибутами МСУ"Проблема" надумана и высосана из пальца. .NET дает возможность использовать атрибуты, есть варианты: использовать их не использовать их совершенно согласен ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 12:27 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
pationрантайм / дизайнтайм Чётко подмечено, +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 12:29 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
pationМетаданные нужны для кого, что бы получить информацию о классе в рантайме, при том что в дизайнтайме она неизвестна.Дизайнер умеет "лазить" в скомпилированные сборки текущего проекта. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 12:36 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
МСУ"Проблема" надумана и высосана из пальца. .NET дает возможность использовать атрибуты, есть варианты: использовать их не использовать их Т. е. вы согласны, что в Дотнете возможность устанавливать значения атрибутов реализована легко и удобно, а возможность считывать эти значения - трудно и неудобно? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 12:48 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320 ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 12:54 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Алексей КpationМетаданные нужны для кого, что бы получить информацию о классе в рантайме, при том что в дизайнтайме она неизвестна.Дизайнер умеет "лазить" в скомпилированные сборки текущего проекта. Я знаю - потому что я и дизайнер, и программист. А так я хотел вытащить данные из атрибутов модели в обычные данные модели представления. Столкнулся со сложностями - просто так фиг достанешь их. Точнее, достать-то можно, только хранить как и где, чтобы много кода не писать. Мне тут подсказали всякие штуки с дженериками - я пока их на уровне модели представления ещё не пробовал. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 12:57 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Алексей Кuser7320 ??? Ну так там писать чего-то надо, чтобы вытащить значения, а чтобы их туда (в атрибуты) поместить, почти ничего писать не надо - квадратную скобку открыл, слово написал и давай значения забивать. Вот бы так и получать эти значения! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 12:58 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320Алексей Кпропущено... Дизайнер умеет "лазить" в скомпилированные сборки текущего проекта. Я знаю - потому что я и дизайнер, и программист.Имеется в виду не человек, а редактор форм в Visual Studio. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 13:00 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320Т. е. вы согласны, что в Дотнете возможность устанавливать значения атрибутов реализована легко и удобно, а возможность считывать эти значения - трудно и неудобно? я, например, несогласен ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 13:02 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Изопропилuser7320Т. е. вы согласны, что в Дотнете возможность устанавливать значения атрибутов реализована легко и удобно, а возможность считывать эти значения - трудно и неудобно? я, например, несогласен Это должно решаться голосованием... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 13:03 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320Ну так там писать чего-то надо, чтобы вытащить значения, а чтобы их туда (в атрибуты) поместить, почти ничего писать не надо - квадратную скобку открыл, слово написал и давай значения забивать. Вот бы так и получать эти значения!Что мешает вбить название поля сразу в XAML? Часто одного названия поля недостаточно. Оно может отличаться, если поле расположено в таблице, на форме редактирования, в детализации объекта и т. п. "Овчинка выделки не стоит" (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 13:10 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320МСУ"Проблема" надумана и высосана из пальца. .NET дает возможность использовать атрибуты, есть варианты: использовать их не использовать их Т. е. вы согласны, что в Дотнете возможность устанавливать значения атрибутов реализована легко и удобно, а возможность считывать эти значения - трудно и неудобно? И то и другое удобно и не вызывает никаких трудностей. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 13:15 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Алексей КЧто мешает вбить название поля сразу в XAML? Мешает его отсутствие. Вот у меня, к примеру, есть aspx, ascx, schtml. А xaml нету, в чем я не прав? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 13:18 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
МСУАлексей КЧто мешает вбить название поля сразу в XAML? Мешает его отсутствие. Вот у меня, к примеру, есть aspx, ascx, schtml. А xaml нету, в чем я не прав? "У всех свои недостатки" (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 13:20 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Изопропилuser7320Т. е. вы согласны, что в Дотнете возможность устанавливать значения атрибутов реализована легко и удобно, а возможность считывать эти значения - трудно и неудобно? я, например, несогласен МСУuser7320пропущено... Т. е. вы согласны, что в Дотнете возможность устанавливать значения атрибутов реализована легко и удобно, а возможность считывать эти значения - трудно и неудобно? И то и другое удобно и не вызывает никаких трудностей. Вот я устанавливаю значения атрибута: Код: c# 1. 2. 3. 4. 5.
Как видите, я делаю это в одну строчку за - сколько там? - скажем, 60 символов. Вы сможете за 60 символов достать эти два свойства? Нет, вы будете писать рефлексивный код вида Код: c# 1.
и это только для одного свойства одного атрибута. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 16:03 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Теперь представьте, что вместо геттеров и сеттеров в классах вы бы писали все эти бесконечные GetProperty(string propertyName). Почему доступ к метаданным реализован не также удобно, как к данным объектов - через точку или там индекс? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 16:05 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320Написать класс-хелпер с расширяющими методами под Ваши типовые задачи с атрибутами? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 16:08 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320Теперь представьте, что вместо геттеров и сеттеров в классах вы бы писали все эти бесконечные GetProperty(string propertyName). Почему доступ к метаданным реализован не также удобно, как к данным объектов - через точку или там индекс? Вы никуя не поняли атрибуты в dotNet реализованы так, как должны быть реализованы, вы же пытаетесь повесить на них функциональность статических свойств читать вышенаписанное 10 раз перез сном, до полного просветления ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 16:29 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Алексей Кuser7320Написать класс-хелпер с расширяющими методами под Ваши типовые задачи с атрибутами? Я вот, когда атрибуты задавал, ничего не писал расширяющего. А чтобы достать - расширять надо? - Фи. pationuser7320Теперь представьте, что вместо геттеров и сеттеров в классах вы бы писали все эти бесконечные GetProperty(string propertyName). Почему доступ к метаданным реализован не также удобно, как к данным объектов - через точку или там индекс? Вы никуя не поняли атрибуты в dotNet реализованы так, как должны быть реализованы, вы же пытаетесь повесить на них функциональность статических свойств читать вышенаписанное 10 раз перез сном, до полного просветления Да, хочу. Мне нужно к цифирям (инты там, даблы) приделать свойства (максимумы там, минимумы и прочие). А чтобы эти цифири остались цифирями и их было удобно использовать в расчётах (чтобы не писать как тут http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1003579&msg=13905106 ), я приделал к ним атрибуты, которые как бы не видно (а, значит, они не мешают), пока просто в расчётах используешь, но когда надо, я хочу быстро и удобно их получить - без всяких расширяющих и прочих конвертеров, а то я и сам могу понаписать... целый фреймворк могу понаписать, да. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 17:05 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320Алексей Кпропущено... Написать класс-хелпер с расширяющими методами под Ваши типовые задачи с атрибутами? Я вот, когда атрибуты задавал, ничего не писал расширяющего. А чтобы достать - расширять надо? - Фи.Обиделся? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 17:23 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320Как видите, я делаю это в одну строчку за - сколько там? - скажем, 60 символов. Вы сможете за 60 символов достать эти два свойства? Нет, вы будете писать рефлексивный код вида И что дальше-то? Бери и проверяй рефилексией все свойства. Код: c# 1.
"Движок" пишется один раз (в виде хелпера или в виде расширения) и используется в программе по недобности. С одной стороны ты хочешь динамику, причем с сотней различных по типу атрибутов. С другой стороны ты орёшь, что неудобно работать с такой разносолой динамикой. Извини, .NET не умеет гадать на кофе. Ты определись с задачей, что конкретно (!) нужно для задачи, скорей всего у тебя с архитектурой затык. А то ты так неумело пытаешься понапридумывать всего и чтоб оно всё гладко решалось одной строчкой кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 17:29 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320целый фреймворк могу понаписать, да. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 17:30 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Я так полагаю, что следующим топиком от user7320 будет вопрос про динамическое изменение значений атрибутов во время исполнения программы. PS. Вдруг локализация понадобится, а тут же все на атрибутах завязано. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 17:51 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
ИМХО - попытки написать что-то универсальное, на все случаи жизни - детская болезнь в программизьме ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 21:09 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Cat2, "имхо" можно смело вычеркивать. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 21:30 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
МСУuser7320Как видите, я делаю это в одну строчку за - сколько там? - скажем, 60 символов. Вы сможете за 60 символов достать эти два свойства? Нет, вы будете писать рефлексивный код вида И что дальше-то? Бери и проверяй рефилексией все свойства. "Движок" пишется один раз (в виде хелпера или в виде расширения) и используется в программе по недобности. Но у них же есть готовый "движок" для задания атрибутов, для свойств и прочих плюшек - почему нет готового для считывания значений с атрибутов? Почему я не могу поставить точку, выбрать коллекцию "Атрибуты" и выбрать один из заданных атрибутов, а потом одно из его свойств? Почему я должен сам это писать, да и, как тут некоторые говорят, без кодогенерации (всякие Т4) это может и не получиться? Т. е. задать атрибуты - дело новичка и студента, а считать - дело профи и всяких мастеров кодогенерации. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 06:09 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Алексей Кuser7320целый фреймворк могу понаписать, да. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Вы мне тут не это... Полный код (в виде конвертера, но это неважно - функция, она и в Африке функция) выглядит так (без всяких проверок на наллы и прочих исключений): Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 06:16 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Проверки на наллы всё же оставил, хотя не все - при использовании as тоже надо проверку делать. Плюс ещё мог что-то упустить. В любом случае, то, что написал Алексей К. - только часть. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 06:18 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Да, я этот конвертер использовал в замле, который многословен как XML, поэтому разметка захламлялась. Пришлось отказаться. В принципе, этот же код надо куда-нибудь в более удобное... расширение или ещё чего там запихать. Чтобы в том же замле, скажем, можно было через точку делать доступ. Да я и написал по подсказке - индексируемые свойства в модели представления, которые позволяют, через точку указывая названия атрибута и имена свойств, получать нужное значение. Другое дело, что тут нет Интеллисенса (он вообще и в замле-то плохо работает, стоит углубиться куда-нибудь в байндинги) и придумана своя нотация, да плюс костыли - эти "указывать через точку" на самом деле строка-ключ словаря, так что никакого рефакторинга нормально не провернёшь. Но замл, похоже, вообще на автоматический рефакторинг (в отличие от C# кода, где какая-то утилитка предлагает заменить все упоминания названия изменённой переменной) не рассчитан. Тоже мне не очень нравится, но хоть что-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 06:24 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Вот, а должно всё через точку или как там вызываться - т. е. за меня кто-то должен нагенерировать для каждого объекта, для которого установлены атрибуты, коллеции этих установленных атрибутов и их свойств (свойств атрибутов, блин!). Т. е. чтобы Интеллисенс работал и изменения названий и всех упоминаний свойств и атрибутов делались парой кликов мышки там - ну, как для "обычного" кода всё сделано. Я что, многого прошу? Просто хочу, чтобы было НОРМАЛЬНО. Вот. Да. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 06:29 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320Но у них же есть готовый "движок" для задания атрибутов, для свойств и прочих плюшек - почему нет готового для считывания значений с атрибутов? Почему нету, а GetCustomAttributes чем не устраивает? Тебе за минуту был написал класс "ЛютыйФреймворк" с нужным расширением, бери и юзай. user7320Почему я не могу поставить точку, выбрать коллекцию "Атрибуты" и выбрать один из заданных атрибутов, а потом одно из его свойств? Наверное потому, что фреймворк писался не только для тебя. user7320Почему я должен сам это писать Потому что программист должен писать код, так обычно принято. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 09:40 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320Да, я этот конвертер использовал в замле, который многословен как XML, поэтому разметка захламлялась. Пришлось отказаться.Пора уже определиться, к чему эти претензии. К System.Reflection или к WPF ? Рефлекшен, это вещь довольно фундаментальная. Она не обязана быть заточена чисто под WPF. Да и появился рефлекшен гораздо раньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 10:03 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Вдогонку: если продолжать в том же ключе, можно дойти и до требований поддержки INotifyPropertyChanged , DependencyProperty и т. п. на уровне базового супертипа Object . ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 10:07 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Сравнивать рефлексию с впф - это как как сравнивать почтового голубя с мылом Впринципе, сходств не мало. Но и не сказать, что прям-таки одно и тоже. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 10:08 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320Вы мне тут не это... Полный код (в виде конвертера, но это неважно - функция, она и в Африке функция) выглядит так (без всяких проверок на наллы и прочих исключений) Повторюсь, про расширение разметки. Мне кажется, что такая постановка задачи будет более удобна: Код: xml 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 10:16 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
Алексей Кuser7320Вы мне тут не это... Полный код (в виде конвертера, но это неважно - функция, она и в Африке функция) выглядит так (без всяких проверок на наллы и прочих исключений) Повторюсь, про расширение разметки. Мне кажется, что такая постановка задачи будет более удобна: Код: xml 1. 2. 3. 4.
Штука в том, что атрибуты не в модели представления, а в модели. Т. е. вот так взять и напрямую указать атрибуты модели представления нельзя, т. к. их нет. Поэтому я и делал через конвертер, т. к. конвертер - часть модели представления и имеет доступ к модели. Поэтому приходилось в параметр конвертера передавать составной объект, содержащий в себе тип модели, имя свойства модели, тип атрибута, имя свойства атрибута. Ну, в вашем расширении, наверное, примерно то же будет (только четыре раза надо будет указать - четыре параметра же), если это расширение будет иметь доступ к модели. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 11:29 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320Ну, в вашем расширении, наверное, примерно то же будет (только четыре раза надо будет указать - четыре параметра же), если это расширение будет иметь доступ к модели. Только как же это муторно будет - мало того, что четыре параметра надо указать, так ещё для каждого параметра идентификатор (для типа это Type), а ещё для каждого идентификатора и параметра - пространство имён замл. В результате получится всего лишь раза так в два меньше, чем через конвертеры. Через конвертеры вот так Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 11:33 |
|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#18+
user7320Алексей Кпропущено... Повторюсь, про расширение разметки. Мне кажется, что такая постановка задачи будет более удобна: Код: xml 1. 2. 3. 4.
Штука в том, что атрибуты не в модели представления, а в модели. Т. е. вот так взять и напрямую указать атрибуты модели представления нельзя, т. к. их нет. Поэтому я и делал через конвертер, т. к. конвертер - часть модели представления и имеет доступ к модели. Поэтому приходилось в параметр конвертера передавать составной объект, содержащий в себе тип модели, имя свойства модели, тип атрибута, имя свойства атрибута. Ну, в вашем расширении, наверное, примерно то же будет (только четыре раза надо будет указать - четыре параметра же), если это расширение будет иметь доступ к модели. Штука в том, что расширение разметки PropertyDescriptionMetadataExtension может брать метаданные откуда угодно: из атрибутов, из БД, из XML файла или ещё откуда. Для этого ему даже необязательно иметь ссылку на ViewModel, в приведённом примере её и нет. Ты зациклился на своём решении. Попробуй посмотреть на задачу свежим взглядом. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 11:45 |
|
|
start [/forum/search_topic.php?author=%D0%92%D0%B8%D0%BA%D1%82%D0%BE%D1%80%D1%80%D1%80&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
others: | 438ms |
total: | 642ms |
0 / 0 |