2017-04-10 9 views
-2

これは技術的なロードブロッキングまたは課題ではありませんが、一般的な説明です。これが不適切なフォーラムである場合は、私が削除することを教えてください。プロパティのみを扱う場合のインターフェイスと抽象クラス

私は、Webサービスから10 xmlを取得する際に、各XMLの共通のプロパティはほとんどなく、そのXMLの特定のプロパティはほとんどありません。

クラス構造は上記のシナリオを考えると

Public abstract class employee 
{ 
    Public int Id {get; set;} 
    Public int Name {get; set;} 
} 

Public class PermanentEmployee: Employee 
{ 
     // PermanentEmployee specific props 
} 

Public class ContractEmployee 
{ 
     //Contractor​ specific properties 
} 

以下のようなものを見てしまう、従業員クラスは抽象であるべきか、それがインターフェイスでなければなりません。どちらが良いですか。

私はプロパティのみ、メソッドはありません。

私のテイク:私はプロパティを再利用できるよう私は方法がないよう、インターフェースは、私はあなたがいくつかの「子クラス」にプロパティを「再利用」したい..

+2

- 質問をするためのあなたの動機は「私は______についての議論に参加したい」であれば、 '、その後、あなたがすべきではありませんここで尋ねる。 – Smartis

+0

それはまだ主にオプションの回答を集め、閉じなければなりません。 – Smartis

+0

私は、この質問は[http://softwareengineering.stackexchange.com/questions](http://softwareengineering.stackexchange.com/questions)で尋ねることができると思いますが、必要な特定のシナリオを提示する場合にのみインタフェースを抽象クラスと決める – Fabio

答えて

1

を意味することはありません抽象クラスのために行くだろう私はいつも抽象クラスを使用します。

メソッドのシグネチャを定義するだけで、そのロジックの本体ではない場合は、interfaceを使用します。

結論として、あなたが私たちと共有しているソースコードは、私がやる方法です。

0

IEmployeeインターフェイスと抽象クラスを定義します。これは一般的に渡すためのインタフェースの柔軟性をもたらしますが、そうでなければコードを繰り返す必要がある場合(DRYなど)には抽象クラスが役に立ちます。 http://stackoverflow.com/help/dont-askで述べたように

public interface IEmployee 
{ 
    int Id { get; set;} 
    int Name { get; set;} 
} 

public abstract class Employee : IEmployee 
{ 
    public int Id { get; set;} 
    public int Name { get; set;} 
} 

public class PermanentEmployee: Employee 
{ 
    // PermanentEmployee specific props 
} 

public class ContractEmployee : Employee 
{ 
    //Contractor​ specific properties 
} 
+1

抽象クラスは一般的に渡すこともできます。インターフェイスのニーズ。インタフェースの他に、多重継承をサポートしない言語の抽象クラスの「回避策」があります。 – Fabio

+0

この例は非常に単純化されていますが、将来のある時点では、抽象クラスはインタフェースが必要としないコード(pub/sub通知など)を持っている可能性があります観察が必要)。これを分割することで、将来的に役立ちます。 – Neil

+1

"ヤニ"(あなたはそれが必要ないだろう) – Fabio

関連する問題