|
Как сделать, чтобы доступ к атрибутам был как к членам класса?
|
|||
---|---|---|---|
#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 |
|
|
start [/forum/topic.php?fid=20&msg=38145110&tid=1405185]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 320ms |
total: | 467ms |
0 / 0 |