c# – 接口方法返回类型是实现接口的类
作者:互联网
我无法理解界面.在这里搜索了类似的问题后,我想出了以下界面,用于定义所有类所需的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定义为接口级别的返回类型).我是否误解了界面,或者我可以做出快速修改?
解决方法:
你想要返回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,partial-classes 来源: https://codeday.me/bug/20190713/1451910.html