我的接口有两个具有相同名称的实现,如下所示:
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
}
}
实现1和2具有相同的RetrieveUserList()
方法。
从实施2 调用RetrieveUserList()
时,我希望将调用重定向到实施1 中的相同方法。
答案 0 :(得分: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();
}
}
或在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();
}
}
答案 1 :(得分:2)
除了Jens所说的之外,您还可以使用装饰器模式。
public interface IDBCaller
{
IEnumerable<User> RetrieveUserList();
}
public class Implementation1 : IDBCaller
{
public IEnumerable<User> RetrieveUserList()
{
return new List<User>();
}
}
public class Implementation2 : IDBCaller
{
IDBCaller decoratedImplementation;
public Implementation2(IDBCaller decoratedImplementation)
{
this.decoratedImplementation = decoratedImplementation;
}
public IEnumerable<User> RetrieveUserList()
{
return this.decoratedImplementation.RetrieveUserList();
}
}