У меня есть следующий сценарий:
public interface ISomething
{
void DoStuff();
//...
}
public class Something : ISomething
{
private readonly ISomethingElse _somethingElse;
//...
public Something (ISomethingElse somethingElse)
{
Contract.Requires(somethingElse != null);
_somethingElse = somethingElse;
}
public void DoStuff()
{
// *1* Please look at explanation / question below
_somethingElse.DoThings();
}
}
В строке 1 и при статической проверке я получу предупреждение о том, что _somethingElse
возможно null, и если я добавлю контракт, он даст мне ошибку
[Тип] реализует метод интерфейса {Interface.Method}, поэтому нельзя добавить требуемый
Какая самая лучшая вещь здесь? Параметры, которые я вижу, включают
- оговорка о защите, хотя кажется бит экстремальный
- a
Contract.Assume
- скрытый третий вариант, о котором я не думал
Обратите внимание, что поле readonly
, поэтому после установки значения в конструкторе его невозможно изменить. Таким образом, предупреждение от кодовых контрактов кажется немного неуместным.