【发布时间】:2011-05-16 21:52:34
【问题描述】:
我无法理解界面。在这里搜索了类似的问题后,我提出了以下接口,用于定义我所有类所需的 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”。存在显式转换(您是否缺少演员表?)
这是有道理的,但我如何拥有它以使其不需要演员?我希望 Select 返回一个 Post (但不将 Post 定义为接口级别的返回类型)。我是否误解了界面,或者我可以快速做出改变?
【问题讨论】:
-
您的
Post似乎在混淆问题;它执行 CRUD 并拥有一个职位。我会把它分成两个类,例如Post和PostStorage. -
帖子存储在 SQL Server 中,并通过 LinqToSQL DBML 访问。上面的 Post 类是 DBML 中 Post 的部分类。
标签: c# interface partial-classes