Возможно, я ошибаюсь в кодовых контрактах, но вот моя ситуация.Кодовые контракты и проблемы наследования, что происходит?
У меня есть следующий код:
interface IFetch<T> // defined in another DLL
{
T Fetch(int id);
}
interface IUserFetch : IFetch<User>
{
IEnumerable<User> GetUsersLoggedIn();
}
class UserFetch : IUserFetch
{
public User Fetch(int id)
{
return (User) Database.DoStuff (id);
}
public IEnumerable<User> GetUsersLoggedIn()
{
return (IEnumerable<User>) Database.DoMoreStuff();
}
}
Я пытаюсь добавить относительно простой договор: Contract.Requires (id != 0);
, и я хочу это подтверждено на Fetch
. Когда я добавляю его непосредственно в Fetch, я получаю предупреждение, что Method Fetch(int id) implements interface 3rdParty.IFetch<User> and thus cannot add Requires
.
Я создал класс абстрактных кодовых контрактов, реализующий IFetch, и указал его в/из UserFetch, используя атрибуты соответственно. Я все еще получаю сообщение об ошибке CodeContracts: The class 'FetchUserContracts' is supposed to be a contract class for '3rdParty.IFetch<User>', but that type does not point back to this class.
Однако, поскольку 3rdParty.IFetch является универсальным типом, я не думаю, что смогу когда-либо поставить на него кодовый контракт.
Была ли проблема выяснена, и если да, то как ее решить?
Возможный дубликат: http://stackoverflow.com/questions/3414586 –
@RobertHarvey: Я в основном возьму это, за исключением того, что моя проблема, похоже, больше связана с генериками –