У меня проблемы с интерфейсами. После изучения подобных вопросов здесь я придумал следующий интерфейс для определения операций CRUD, необходимых для всех моих классов:
public interface IData<T>
{
IData<T> Select(int id);
List<T> SelectMultiple();
void Insert();
void Update();
void Delete();
}
Затем это реализуется в моих частичных классах:
public partial class Post : IData<Post>
{
public IData<Post> Select(int id)
{
MyDataContext dc = MyDataContext.Create();
return dc.Posts.Single(p => p.PostID == id);
}
public List<Post> SelectMultiple()
{
MyDataContext dc = MyDataContext.Create();
return dc.Posts.ToList();
}
// Update() and Delete() declarations
}
Все это прекрасно компилируется, однако, если я попытаюсь использовать метод Post Select():
Post p = new Post().Select(1);
Ошибка возникает из-за Невозможно неявно преобразовать тип IData в Post. Существует явное преобразование (вам не хватает приведения?)
Это имеет смысл, но как сделать так, чтобы не требовался Cast? Я хочу, чтобы Select возвращал Post (но не определял Post как возвращаемый тип на уровне интерфейса). Я неправильно понял интерфейсы, или я могу быстро внести изменения?
Post
смешивает проблемы; он выполняет CRUD, а также занимает пост. Я бы разделил его на два класса, например.Post
иPostStorage
. - person strager   schedule 28.11.2010