2017-10-07 39 views
-1

我一直在學習界面,我的問題是: 比如我有一個名爲Car類:Car實現名爲接口:ICar接口成員簽名參數

public class Car: ICar 

兩個CarICarSave方法:

public bool Save(Car car) 
    {some save logic} 

應該是Save方法,通過CarICar,這是更好的做法,還是不重要?我在想ICar,因爲如果這個接口被另一個類繼承,它仍然可以工作。

感謝任何指導,謝謝。

+2

是'Save'方法'ICar'界面的一部分?爲什麼要傳遞另一個'ICar'的實例呢? – orhtej2

+0

@ orhtej2好點。我已經移除了ICar,因爲它不是必需的,因爲我已經有了當前實例。謝謝你的幫助。 –

回答

2

想想這樣:如果ICar預期Car作爲參數,ICar將明確對Car可以根據,而去耦是當您使用的接口有什麼想要的。

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

有一個編譯錯誤。 public interface ICar {void Save(ICar car);} public class Car:ICar {public void Save(Car car){}} – selami

+0

@selami分心,修復。 –

+0

@CamiloTerevinto完美的解釋和我正在尋找什麼,謝謝。 –