我无法理解界面。在浏览了这里的类似问题之后,我想出了以下接口(interface),用于定义我所有类所需的 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 定义为接口(interface)级别的返回类型)。我是否误解了界面,或者我是否可以进行快速更改?
最佳答案
您想返回类型为 T
的东西, 不是 IData<T>
, 所以只需更改签名(至少我猜这是你想要的,因为你会返回 List<IData<T>>
否则):
public interface IData<T>
{
T Select(int id);
List<T> SelectMultiple();
void Insert();
void Update();
void Delete();
}
并适本地实现它:
public Post Select(int id)
{
MyDataContext dc = MyDataContext.Create();
return dc.Posts.Single(p => p.PostID == id);
}
如果您只想在 Post 类中实现此行为,请显式实现 IData<T>
界面:
public partial class Post : IData<Post>
{
public Post Select(int id)
{
MyDataContext dc = MyDataContext.Create();
return dc.Posts.Single(p => p.PostID == id);
}
IData<Post> IData<Post>.Select(int id)
{
return Select(id);
}
}
关于c# - 接口(interface)方法返回类型为实现接口(interface)的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4297715/