gpt4 book ai didi

c# - 使接口(interface)方法返回实现它的类的类型的对象

转载 作者:太空狗 更新时间:2023-10-30 00:04:57 25 4
gpt4 key购买 nike

我已经搜索了一个答案来完成这个,但我没有找到任何东西:我想要一个接口(interface)的方法返回一个实现它的类的类型的对象。例如:

interface InterfaceA {
public static returnValue getObjectFromDatabase(); //What do i need to put as returnValue?
}

然后,如果我有两个实现它的类(例如,ClassA 和 ClassB),我希望:

ClassA obj1 = ClassA.getObjectFromDatabase(); //return object of class ClassA
ClassB obj2 = ClassB.getObjectFromDatabase(); //return object of class ClassB

提前谢谢你。

最佳答案

你想在这里做的事情不会奏效有两个原因:

  1. 接口(interface)不能有静态成员
  2. 接口(interface)需要指定其方法的返回类型。一个接口(interface)不应该知道实现它的所有成员的类型,这违背了重点,在许多情况下是无法实现的。

此外,即使您确实做到了这一点,它仍然不是好的设计,因为它违反了单一职责原则。您可以通过谷歌搜索或浏览此站点找到大量关于此的信息,但正如名称所示,其理念是类应该只具有它负责的单一目的。

假设您的类是一个 Employee 类。该类的职责非常明确,它应该负责保存与公司中的 Employee 相关的信息和功能。它可能有 FirstNameGivePromotion() 等成员。所以现在让这个类对其负责是很奇怪的自己的数据库访问权限。

因此,如何实现这一点将由另一个负责从数据库中检索对象的类来实现。一种常见的设计模式是存储库模式。您可能还想利用泛型。所以你的存储库界面可能看起来像:

public interface IRepository<T>
{
T GetFromDatabase()
}

然后您可以使用通用存储库实现:

public class Repository<T> : IRepository<T>
{
T GetFromDatabase()
{
//Your actual code for database retrieval goes here
}
}

或者,如果某些或所有类的数据库检索代码非常不同,您可以使用特定的存储库实现:

public class EmployeeRepository : IRepository<Employee>
{
Employee GetFromDatabase()
{
//Your actual code for database retrieval goes here
}
}

关于c# - 使接口(interface)方法返回实现它的类的类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23031993/

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