C# - 一个接口,两个实现:如何将方法调用从一个实现重定向到另一个实现?

Yan*_*ide 0 c# interface

我的界面有两个相同名称的实现,如下所示:

interface IDBCaller
{ 
    IEnumerable<User> RetrieveUserList();
    void Method1();
    void Method2();
}

//First implementation of IDBCaller in project1  
class DBCaller : IDBCaller
{

    public IEnumerable<User> RetrieveUserList()
    {
        return new List<User>();
    }

    public void Method1()
    {
        //doing something
    }

    public void Method2()
    {
        //doing something
    }
}
//Second implementation of IDBCaller in project2 
class DBCaller: IDBCaller
{

    public IEnumerable<User> RetrieveUserList()
    {
        return null; //Currently returns null but the desire state is to call the RetrieveUserList in Implementation1 from project 1
    }
    public void Method1()
    {
         //doing something
    }

    public void Method2()
    {
         //doing something
    }
}
Run Code Online (Sandbox Code Playgroud)

实现1和2具有相同的RetrieveUserList()方法.当RetrieveUserList()实现2调用时,我希望将调用重定向到实现1中的相同方法.

Jen*_*und 5

你可以使用继承,例如:

interface IDBCaller
{ 
    IEnumerable<User> RetrieveUserList();
}

class Implementation1 : IDBCaller
{
    public virtual IEnumerable<User> RetrieveUserList()
    {
        return new List<User>();
    }
}

class Implementation2 : Implementation1
{
    public override IEnumerable<User> RetrieveUserList()
    {
        return base.RetrieveUserList();
    }
}
Run Code Online (Sandbox Code Playgroud)

或者使用具有RetrieveUserList实现的基类

interface IDBCaller
{ 
    IEnumerable<User> RetrieveUserList();
    void Method1();
    void Method2();
}

class ImplementationBase
{
    public virtual IEnumerable<User> RetrieveUserList()
    {
        return new List<User>();
    }

}
class Implementation1 : ImplementationBase, IDBCaller
{
    public void Method1()
    {
        throw new NotImplementedException();
    }

    public void Method2()
    {
        throw new NotImplementedException();
    }
}

class Implementation2 : ImplementationBase, IDBCaller
{
    public void Method1()
    {
        throw new NotImplementedException();
    }

    public void Method2()
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)