У меня есть вопрос относительно проблемы с L2S, Автоматически сгенерированным DataContext и использованием Частичных Классов. Я абстрагировал свой datacontext, и для каждой таблицы я использую, я реализую класс с интерфейсом. В коде ниже Вас видят, что у меня есть Интерфейс и два частичных класса. Первый класс должен просто там удостовериться, что класс в автоматически сгенерированном datacontext наследовал Интерфейс. Другой автоматически сгенерированный класс удостоверяется, что метод от Интерфейса реализован.
namespace PartialProject.objects
{
public interface Interface
{
Interface Instance { get; }
}
//To make sure the autogenerated code inherits Interface
public partial class Class : Interface { }
//This is autogenerated
public partial class Class
{
public Class Instance
{
get
{
return this.Instance;
}
}
}
}
Теперь моя проблема состоит в том, что метод, реализованный в автоматически сгенерированном классе, дает следующую ошибку:-> Свойство 'Экземпляр' не может реализовать свойство от интерфейса 'PartialProject.objects. Interface'. Типом должен быть 'PartialProjects.objects. Интерфейс'. <-
Какая-либо идея, как эта ошибка может быть разрешена? Следует иметь в виду, что я ничего не могу отредактировать в автоматически сгенерированном коде.
Заранее спасибо!
Вы можете решить это, реализовав интерфейс явно:
namespace PartialProject.objects
{
public interface Interface
{
Interface Instance { get; }
}
//To make sure the autogenerated code inherits Interface
public partial class Class : Interface
{
Interface Interface.Instance
{
get
{
return Instance;
}
}
}
//This is autogenerated
public partial class Class
{
public Class Instance
{
get
{
return this.Instance;
}
}
}
}
Типы возвращаемых данных не являются ковариантными в C #. Поскольку вы не можете изменить автоматически сгенерированный код, единственное решение, которое я вижу, - это изменить интерфейс:
public interface Interface<T>
{
T Instance { get; }
}
И соответственно изменить частичный класс:
public partial class Class : Interface<Class> { }