C# 使接口方法返回实现它的类类型的对象
我已经搜索了一个答案来实现这一点,但我没有找到任何东西:我希望接口的方法返回实现它的类类型的对象。例如:C# 使接口方法返回实现它的类类型的对象,c#,.net,object,interface,C#,.net,Object,Interface,我已经搜索了一个答案来实现这一点,但我没有找到任何东西:我希望接口的方法返回实现它的类类型的对象。例如: interface InterfaceA { public static returnValue getObjectFromDatabase(); //What do i need to put as returnValue? } 然后,如果我有两个实现它的类(例如,ClassA和ClassB),我希望: ClassA obj1 = ClassA.getObjectFromDatab
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
提前谢谢你
我希望接口的方法返回一个类类型的对象,该类>实现了接口
您似乎忽略了接口的要点:接口不应该了解其实现者。接口公开合同,仅此而已
另外,从您的示例中,我可以看到您正在尝试创建一个
静态方法
,但是接口和静态方法彼此相差很远。接口与实例绑定,而不是与类型绑定。一种方法是使用泛型:
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 ();
}
}
}
类程序
{
接口MyInterface
{
SomeType getObjectFromDatabase();
}
类A:MyInterface{public A getObjectFromDatabase(){return new A();}
类B:MyInterface{public B getObjectFromDatabase(){return new B();}
班级计划2
{
静态空隙干管()
{
A a1,a2;
a1=新的A();
a2=a1.getObjectFromDatabase();
B b1,b2;
b1=新的B();
b2=b1.getObjectFromDatabase();
}
}
}
出于两个原因,您想在此处执行的操作不起作用:
Employee
类。该类的职责非常明确,它应该负责保存与公司中员工相关的信息和功能。它可能有FirstName
,GivePromotion()
等成员。因此,现在让这个类也负责自己的数据库访问会很奇怪
因此,如何实现这一点将取决于另一个类,该类负责从数据库中检索对象。一种常见的设计模式是存储库模式。您可能还想利用泛型。因此,您的存储库界面可能如下所示:
public interface IRepository<T>
{
T GetFromDatabase()
}
公共接口IRepository
{
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
}
}
公共类存储库:IRepository
{
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
}
}
公共类EmployeeRepository:IRepository
{
员工GetFromDatabase()
{
//数据库检索的实际代码在这里
}
}
很抱歉出现了这些错误,但我如何才能将其存档?例如,如果我有两个不同的类,使用一个接口的方法,返回一个对象,该对象的类与调用它的人的类相同?@MauroValvano不完全是您所问的,但您是否愿意给出一个答案,给出一个替代设计来实现这一点?因为你所建议的不是一个好的设计,如果它能帮助我的话,很难让它正常工作,当然!:)接口不能有静态成员,因此无论您试图实现什么都无法实现。但是,为什么您需要一个A
实例来创建A
?我觉得这个设计很糟糕。是的,没错。从数据库中获取一个新对象作为现有对象的实例成员是没有意义的。我同意,我只是试图解决问题的机制,而不是设计问题——我希望有更多的上下文……可以理解,但是,由于在最初的问题中它是静态的,我建议你实际上是在引入新的设计问题,提问者已经意识到这是一个问题。我选择另一个作为answare,但这也很好,为什么需要创建另一个answare实例?例如,如果您有一个类Car,并且您想要下一个模型,那么car1.getNextModel()将返回另一个Car对象。