我已经找到了完成此任务的答案,但我还没有找到任何东西:我想要一个接口的方法来返回实现它的类的类型的对象。例如:
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
提前谢谢你。
答案 0 :(得分:10)
你想在这里做什么不会有两个原因:
此外,如果你确实设法做到这一点,它仍然不是好的设计,因为它违反了单一责任原则。你可以通过谷歌搜索或浏览这个网站找到大量的信息,但这个想法 - 如名称所示 - 是一个类应该只有一个目的,它负责。
所以想象一下,你的班级是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
}
}
答案 1 :(得分:2)
一种方法是使用泛型:
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 ();
}
}
}
答案 2 :(得分:1)
我想要一个接口的方法来返回类的类型对象&gt;实施了它
您似乎忽略了接口:接口不应该对其实现者有任何了解。接口暴露了合同,就是这样。
另外,从您的示例中,我可以看到您正在尝试创建static
方法,但接口和静态彼此相距很远。接口与实例绑定,而不是类型。