2015-10-27 51 views
0

这是接口如何使用子类参数实现接口方法?

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与它交互。

注:我认为实现使用TargetLocalProject而是直接使用(而不是thruogh接口)LocalTransporter当参数的类型应该是具体的项目类型,而不是基类ProjectBase而不是方法。

我希望我明确自己。那么,有没有办法在接口中使用基类来实现这个接口方法,但是在实现的方法中使用了子类吗?

+1

听起来像你想让你的界面通用。 – juharr

+0

@juharr你是对的,以及答案。 – ozgur

回答

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; 
    } 
} 
+0

我试过了,这完全解决了这个问题。非常感谢你。在6分钟内接受答案=) – ozgur

相关问题