2017-10-07 6 views
-1

パラメータ方法:インターフェイスメンバーシグネチャは、私がインタフェースについて学習していると、私の質問は

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

Saveの方法は、 CarまたはICar、これはより良い方法ですか、それとも関係ありませんか?私はICarと考えていました。なぜなら、このインターフェイスが別のクラスに継承されていれば、それでも動作するからです。

ありがとうございました。

+2

を 'ICar'インタフェースの一部' Save'方法ですか?それではなぜICarの別のインスタンスを渡すのですか? – orhtej2

+0

@ orhtej2良い点。私はICarを削除しました。なぜなら私はすでに現在のインスタンスを持っているからです。ご協力いただきありがとうございます。 –

答えて

2

は、このようにそれについて考える:ICarパラメータとしてCarを期待場合、は、インターフェイスを使用するときたかった何でデカップリングしながら、ICarは、Carに明示的に依存することになります。

ICarCarに依存している場合:

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は廃止された場合(例えば、一般的すぎるとみなされる)、あなたはあなたの全体のコードをリファクタリングする必要があると思います。

ICarICarに依存している場合代わりに、:

ここ
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);} パブリッククラスCar:ICar {public void Save(Car car){}} – selami

+0

@selami気を散らして固定しました。 –

+0

@CamiloTerevinto完璧に説明され、私が探していたもの、感謝します。 –

関連する問題