这是界面
public interface ITransporter
{
TransporterType TransporterType { get; set; }
TransportActionResults BeginTransport(
Project sourceProject,
ProjectBase targetProject);
bool CheckTargetExists(ProjectBase project);
}
这里ProjectBase
是所有类型的项目类的抽象类。
这是实现ITransporter
接口的类中的方法。
public class LocalTransporter : ITransporter
{
public TransportActionResults BeginTransport(
Project sourceProject,
TargetLocalProject targetProject)
{
return TransportActionResults.Success;
}
此TargetLocalProject
类继承自ProjectBase
类。但是,我收到的错误是" LocalTransporter类没有实现接口成员"并指向BeginTransport
方法。
这是我的问题。我需要使用基类BeginTransport
来实现接口的ProjectBase
方法,因为从基类继承了几个不同的项目类,我们不知道将使用哪个类
此外,还有一些不同的Transporter
类型,因此我需要使用接口ITransporter
与其进行交互。
注意:我考虑使用ProjectBase
代替TargetLocalProject
来实施该方法,但直接使用LocalTransporter
(而不是thruogh界面)时,参数' s类型应该是特定的Project类型而不是基类。
我希望自己清楚明白。那么,有没有办法在接口中使用基类实现这个接口方法,而在实现方法中使用子类?
答案 0 :(得分:4)
您可以使用泛型,只需更改您的界面:
public interface ITransporter<T> where T : ProjectBase
{
TransporterType TransporterType { get; set; }
TransportActionResults BeginTransport(Project sourceProject, T targetProject);
bool CheckTargetExists(T project);
}
然后你可以在你的具体类中实现它:
public class LocalTransporter : ITransporter<TargetLocalProject>
{
public TransportActionResults BeginTransport(Project sourceProject, TargetLocalProject targetProject)
{
return TransportActionResults.Success;
}
}
答案 1 :(得分:1)
您可以提供如下显式接口实现:
internal class LocalTransporter : ITransporter
{
public TransportActionResults BeginTransport(
Project sourceProject,
TargetLocalProject targetProject)
{
// specific implementation
return TransportActionResults.Success;
}
public TransporterType TransporterType { get; set; }
TransportActionResults ITransporter.BeginTransport(Project sourceProject, ProjectBase targetProject)
{
// generic implementation
return TransportActionResults.Success;
}
public bool CheckTargetExists(ProjectBase project)
{
return true;
}
}
您可以考虑在此处使用visitor pattern。