gpt4 book ai didi

c# - 接口(interface)方法返回类型为实现接口(interface)的类

转载 作者:行者123 更新时间:2023-11-30 13:15:49 24 4
gpt4 key购买 nike

我无法理解界面。在浏览了这里的类似问题之后,我想出了以下接口(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com