Использование атрибутов
От: dorofeevilya Россия  
Дата: 12.08.08 11:23
Оценка: 3 (1)
Добрый день!

В моих классах очень много свойств, которые не могут принимать значения null, напр.:
SomeProp MyProperty
{
   SomeProp get() { ... }
   void set(SomeProp value)
   {
      if (value == null) {
         throw new ArgumentNullException(); }

      _myProp = value;
   }
}


Можно ли сделать такую проверку декларативным способом:
[NonNull]
SomeProp MyProperty
{
   SomeProp get() { ... }
   void set(SomeProp value)
   {
      _myProp = value;
   }
}


Я знаю, что такую задачу решают языки, поддерживающие аспектно-ориентированное программирование, но хотелось бы использовать стандартные языки (C#, MC++).
Спасибо.
Re: Использование атрибутов
От: Nuseraro Россия  
Дата: 12.08.08 11:37
Оценка:
Здравствуйте, dorofeevilya, Вы писали:

D>Добрый день!


D>В моих классах очень много свойств, которые не могут принимать значения null, напр.:

D>
D>SomeProp MyProperty
D>{
D>   SomeProp get() { ... }
D>   void set(SomeProp value)
D>   {
D>      if (value == null) {
D>         throw new ArgumentNullException(); }

D>      _myProp = value;
D>   }
D>}
D>


D>Можно ли сделать такую проверку декларативным способом:

D>
D>[NonNull]
D>SomeProp MyProperty
D>{
D>   SomeProp get() { ... }
D>   void set(SomeProp value)
D>   {
D>      _myProp = value;
D>   }
D>}
D>

А в чём Вы видите плюсы второй конструкции над первой?
Homo Guglens
Re[2]: Использование атрибутов
От: dorofeevilya Россия  
Дата: 12.08.08 11:43
Оценка: +1
Здравствуйте, Nuseraro, Вы писали:

N>А в чём Вы видите плюсы второй конструкции над первой?


Избавляет от написания лишнего кода (хотя может быть кто-нибудь скажет, что "лишние" 2 строчки кода — это не аргумент), и, на мой взгляд, как и любая другая декларативная конструкция, улучшает читабельность и понимание кода. К тому же повторяющийся код можно будет выделить в отдельную сущность. Насколько я понимаю, эти проблемы решает АОП. Поправьте, если не прав.
Re[3]: Использование атрибутов
От: фонарь Беларусь блог
Дата: 12.08.08 11:51
Оценка:
Здравствуйте, dorofeevilya, Вы писали:

D>Избавляет от написания лишнего кода (хотя может быть кто-нибудь скажет, что "лишние" 2 строчки кода — это не аргумент), и, на мой взгляд, как и любая другая декларативная конструкция, улучшает читабельность и понимание кода. К тому же повторяющийся код можно будет выделить в отдельную сущность. Насколько я понимаю, эти проблемы решает АОП. Поправьте, если не прав.


если юзаешь R#, попробуй ExternalAnnotations
Автор: фонарь
Дата: 05.08.08
, если устроят просто подсказки, без runtime/compiletime проверки
Re[4]: Использование атрибутов
От: dorofeevilya Россия  
Дата: 12.08.08 11:55
Оценка:
Здравствуйте, фонарь, Вы писали:

Ф>если юзаешь R#, попробуй ExternalAnnotations
Автор: фонарь
Дата: 05.08.08
, если устроят просто подсказки, без runtime/compiletime проверки


В том то и дело, что работаю на C# и MC++.
Re[5]: Использование атрибутов
От: фонарь Беларусь блог
Дата: 12.08.08 11:59
Оценка:
Здравствуйте, dorofeevilya, Вы писали:

D>В том то и дело, что работаю на C# и MC++.


R# == ReSharper
Re[6]: Использование атрибутов
От: dorofeevilya Россия  
Дата: 12.08.08 12:05
Оценка:
Здравствуйте, фонарь, Вы писали:

Ф>R# == ReSharper


А я думал, ты об этом R#.
ReSharper тоже не использую.

А вообще я имел ввиду, можно ли такого достичь, используя только стандартные средства?
Re: Использование атрибутов
От: Lloyd Россия  
Дата: 12.08.08 12:14
Оценка: 9 (4)
Здравствуйте, dorofeevilya, Вы писали:

D>Я знаю, что такую задачу решают языки, поддерживающие аспектно-ориентированное программирование, но хотелось бы использовать стандартные языки (C#, MC++).


не совсе понятно зачем тут "но". AOP прекрасно уживается со стандартными языками. см PostSharp
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[2]: Использование атрибутов
От: dorofeevilya Россия  
Дата: 12.08.08 12:30
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>не совсе понятно зачем тут "но". AOP прекрасно уживается со стандартными языками. см PostSharp


А мне вот понятно было, зачем тут "но". Пока PostSharp не посмотрел.
Спасибо! То, что нужно!

Вот только такой вопрос остался не понятным (пока что не нашел ответа на сайте):
Установка PostSharp'а обязательна? Т.е., если я просто скопирую весь проект с постшарповскими referenced сборками на другой компьютер, работать, насколько я понял, не будет? Таким образом можно допустить ошибку: проект соберется, а некоторая функциональность пропадет. Или я ошибаюсь?
Re[3]: Использование атрибутов
От: Lloyd Россия  
Дата: 12.08.08 12:35
Оценка:
Здравствуйте, dorofeevilya, Вы писали:

D>Вот только такой вопрос остался не понятным (пока что не нашел ответа на сайте):

D>Установка PostSharp'а обязательна? Т.е., если я просто скопирую весь проект с постшарповскими referenced сборками на другой компьютер, работать, насколько я понял, не будет? Таким образом можно допустить ошибку: проект соберется, а некоторая функциональность пропадет. Или я ошибаюсь?

Можно сделать так, что он без PostSharp-а просто не соберется
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[2]: Использование атрибутов
От: Kore Sar  
Дата: 12.08.08 15:29
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, dorofeevilya, Вы писали:


D>>Я знаю, что такую задачу решают языки, поддерживающие аспектно-ориентированное программирование, но хотелось бы использовать стандартные языки (C#, MC++).


L>не совсе понятно зачем тут "но". AOP прекрасно уживается со стандартными языками. см PostSharp


Спасибо еще раз.
Re: Использование атрибутов
От: xRay-Magnitka  
Дата: 13.08.08 09:24
Оценка:
Здравствуйте, dorofeevilya, Вы писали:

D>Добрый день!


D>Я знаю, что такую задачу решают языки, поддерживающие аспектно-ориентированное программирование, но хотелось бы использовать стандартные языки (C#, MC++).

D>Спасибо.

A это: Enterprise Library -> Validation Application Block -> NotNullValidator не подойдет?
... << RSDN@Home 1.2.0 alpha 4 rev. 1094>>
Re[2]: Использование атрибутов
От: dorofeevilya Россия  
Дата: 13.08.08 09:25
Оценка:
Здравствуйте, xRay-Magnitka, Вы писали:

XM>A это: Enterprise Library -> Validation Application Block -> NotNullValidator не подойдет?


А что это?
Re[2]: Использование атрибутов
От: Lloyd Россия  
Дата: 13.08.08 13:10
Оценка:
Здравствуйте, xRay-Magnitka, Вы писали:

D>>Я знаю, что такую задачу решают языки, поддерживающие аспектно-ориентированное программирование, но хотелось бы использовать стандартные языки (C#, MC++).

D>>Спасибо.

XM>A это: Enterprise Library -> Validation Application Block -> NotNullValidator не подойдет?


Видимо не подойдет, т.к. NotNull сработает только при валидации объекта. А в приведенном коде она работает во время выставления свойства.
... << RSDN@Home 1.2.0 alpha rev. 786>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.