我一直在学习接口,我的问题是:
例如,我有一个名为Car
的{{1}}类,它实现了一个名为Car
的接口
ICar
public class Car: ICar
和Car
都有ICar
方法:
Save
public bool Save(Car car)
{some save logic}
方法应该传递Save
还是Car
,这是更好的做法,还是无关紧要?我在想ICar
,因为如果这个接口被另一个类继承,它仍然可以工作。
感谢任何指导,谢谢。
答案 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);
}