接口成员签名参数

时间:2017-10-07 21:53:19

标签: c# interface

我一直在学习接口,我的问题是: 例如,我有一个名为Car的{​​{1}}类,它实现了一个名为Car的接口

ICar

public class Car: ICar Car都有ICar方法:

Save

public bool Save(Car car) {some save logic} 方法应该传递Save还是Car,这是更好的做法,还是无关紧要?我在想ICar,因为如果这个接口被另一个类继承,它仍然可以工作。

感谢任何指导,谢谢。

1 个答案:

答案 0 :(得分:2)

以这种方式考虑:如果ICar期望Car作为参数,ICar将明确依赖Car,而解耦< / em>是您使用接口时的需求。

如果ICar取决于Car

public interface ICar
{
    void Save(Car car);
}

public class Car : ICar
{
    public void Save(Car car) { }
}

public class Van : ICar
{
    // Here Van needs to have a Car object, why should it?
    public void Save(Car car) { }
}

如果Car被弃用(例如,视为过于通用),则需要重构整个代码。

相反,如果ICar取决于ICar

public interface ICar
{
    void Save(ICar car);
}

public class Car : ICar
{
    public void Save(ICar car) { }
}

public class Van : ICar
{
    public void Save(ICar car) { }
}

在这里,如果Car存在与否,它实际上并不重要,你不会耦合到它的实现。

但是,由于ICar在实施时已经是ICar,因此您无需将其作为参数传递。

考虑:

public interface ICar
{
    // Will save myself
    void Save();
}

对战:

public interface ICar
{
    // Will save some ICar
    void Save(ICar car);
}