Есть интерфейс
public interface IClassA
{
void Method1(int value);
}
Есть класс, в котором нужно контролировать валидность входного параметра
public class ClassA: IClassA
{
public void Method1(int value)
{
Contract.Requires(value > 5);
}
}
Подобный код, выдает warning:
"Method 'ClassA.Method1' implements interface method 'IClassA.Method1', thus cannot add Requires".
Что примерно понятно. Для удаление этого предупреждения нужно модифицировать код.
1. Добавить абстрактный класс, реализующий интерфейс IClassA, в котором буду содержаться проверки контрактов
2. Пометить соответствующими атрибутами интерфейс и абстрактный класс
[ContractClass(typeof(ClassAContract))]
public interface IClassA
{
void Method1(int value);
}
[ContractClassFor(typeof(IClassA))]
public abstract class ClassAContract : IClassA
{
public void Method1(int value)
{
Contract.Requires(value > 5);
}
}
Вопросы:
1. При таком подходе, для каждого интерфейса нужно "городить" абстрактный класс. Трудоемко. Может есть способ проще, атрибуты какие-либо?
2. Если в интерфейсе объявлены события, то в абстрактном классе приходится писать "дурной код" использования неиспользуемых событий, для исключения warning-ов (
The event is never used). Возможно есть более удобный способ?