如何用子类参数实现Interface方法
本文关键字:Interface 方法 实现 参数 何用 子类 | 更新日期: 2023-09-27 18:19:34
这是接口
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
方法。
这是我的问题。我需要使用基类ProjectBase
来实现接口的BeginTransport
方法,因为从基类继承了几个不同的项目类,我们不知道将使用哪一个。
此外,还有几个不同的Transporter
类型,因此我需要使用接口ITransporter
与之交互。
注意:我曾考虑使用ProjectBase
而不是TargetLocalProject
来实现该方法,但当直接使用LocalTransporter
(而不是through接口)时,参数的类型应该是特定的Project类型,而不是基类。
我希望我说清楚了。那么,有没有一种方法可以实现这个接口方法,在接口中使用基类,但在实现方法中使用子类?
您可以为此使用泛型,只需稍微更改一下您的接口:
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;
}
}
您可以提供如下显式接口实现:
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;
}
}
您可能需要考虑在此处使用访问者模式。