使接口方法返回实现它的类的类型的对象
本文关键字:类型 对象 实现 接口 方法 返回 | 更新日期: 2023-09-27 17:57:58
我已经搜索了一个答案来实现这一点,但我没有找到任何东西:我希望接口的方法返回实现它的类类型的对象。例如:
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
提前谢谢。
你想在这里做的事情不起作用有两个原因:
- 接口不能有静态成员
- 接口需要指定其方法的返回类型。接口不应该知道实现它的所有成员的类型,这违背了这一点,在许多情况下是无法实现的
此外,如果您确实做到了这一点,它仍然不是一个好的设计,因为它违反了单一责任原则。你可以通过谷歌搜索或浏览这个网站来找到很多关于这方面的信息,但正如名字所示,这个想法是一个类应该只负责一个单一的目的。
因此,假设您的类是,例如,一个Employee
类。该类有一个非常明确的职责,它应该负责保存与公司中的Employee
相关的信息和功能。它可能有FirstName
、GivePromotion()
等成员。因此,现在让这个类也负责自己的数据库访问是很奇怪的。
因此,如何实现这一点将通过另一个负责从数据库中检索对象的类来实现。一种常见的设计模式是存储库模式。您可能还想利用泛型。所以您的存储库界面可能看起来像:
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
}
}
一种方法是使用泛型:
class Program
{
interface MyInterface<SomeType>
{
SomeType getObjectFromDatabase ();
}
class A : MyInterface<A> { public A getObjectFromDatabase () { return new A (); } }
class B : MyInterface<B> { public B getObjectFromDatabase () { return new B (); } }
class Program2
{
static void Main ()
{
A a1, a2;
a1 = new A ();
a2 = a1.getObjectFromDatabase ();
B b1, b2;
b1 = new B ();
b2 = b1.getObjectFromDatabase ();
}
}
}
我想要一个接口的方法返回一个类类型的对象,该类实现了
您似乎忽略了接口的要点:接口不应该对其实现者有任何了解。接口公开合约,仅此而已。
此外,从您的示例中,我可以看到您正试图创建一个static
方法,但接口和静态方法相距甚远。接口与实例绑定,而不是与类型绑定。