使接口方法返回实现它的类的类型的对象

本文关键字:类型 对象 实现 接口 方法 返回 | 更新日期: 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

提前谢谢。

使接口方法返回实现它的类的类型的对象

你想在这里做的事情不起作用有两个原因:

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

此外,如果您确实做到了这一点,它仍然不是一个好的设计,因为它违反了单一责任原则。你可以通过谷歌搜索或浏览这个网站来找到很多关于这方面的信息,但正如名字所示,这个想法是一个类应该只负责一个单一的目的。

因此,假设您的类是,例如,一个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
    }
}

一种方法是使用泛型:

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方法,但接口和静态方法相距甚远。接口与实例绑定,而不是与类型绑定。