이런 식으로 생각해 : ICar
가 매개 변수로 Car
예상 경우 가 당신이 인터페이스를 사용할 때 원했던 것입니다 디커플링 동안 ICar
이 Car
에 명시 적으로 따라 할 것입니다.
ICar
경우 Car
에 따라 달라집니다 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) { }
}
경우, 당신은 당신의 전체 코드를 리팩토링해야 할 것입니다. 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);
}
는'Save' 방법'ICar' 인터페이스의 일부인가? 그런데 왜 ICar의 다른 인스턴스를 전달합니까? – orhtej2
@ orhtej2 좋은 지적. 이미 현재 인스턴스가 있기 때문에 필요하지 않으므로 ICar를 제거했습니다. 당신의 도움을 주셔서 감사합니다. –