2016-10-04 1 views
-2

オブジェクト指向設計を正確に、私は人の三種類があり、同じ

Class Normal 
{ 
    string FirstName { get; set; } 
    int Age { get; set; } 
} 

    Class Better 
{ 
    string FirstName { get; set; } 
    int Age { get; set; } 
} 

    Class Best 
{ 
    string FirstName { get; set; } 
    int Age { get; set; } 
    string Address { get; set; } 
    int Score { get; set; } 
} 

つのリストに入れてするための最良の方法は何ですか? 私自身が思いついた:

public class Best:IPerson 
{ 
    public PassengerType Type { get; set; } 
    public string FirstName { get; set; } 
    public int Age { get; set; } 
    public string Address { get; set; } 
    public int Score { get; set; } 
} 

public enum PersonType 
{ 
    Normal = 0, 
    Better = 1, 
    Best = 2 
} 

public interface IPerson 
{ 
    PassengerType Type { get; set; } 
    string FirstName { get; set; } 
    int Age { get; set; } 
} 

そして

私はノーマルと良いの両方のためにそれを使用することができますし、私はタイプによってdistictionを作ることができ
public class Person:IPerson 
{ 
    public PassengerType Type { get; set; } 
    public string FirstName { get; set; } 
    public int Age { get; set; } 
} 

、最終的に:リスト....

これは良いデザインですか? 「ベスト」インスタンスが作成されたが、タイプが「標準」に設定されている場合はどうなりますか?それは悪いデザインだろうか?

+0

ようこそ。どのプログラミング言語を使用していますか? –

+0

C#は私が選んだ言語です –

答えて

1

一般的にクラスの種類を比較するだけで十分です。

public class BasePerson 
{ 
    public string FirstName { get; set; } 
    public int Age { get; set; } 
} 

public class NormalPerson : BasePerson 
{ 
} 

public class BetterPerson : BasePerson 
{  
} 

public class BestPerson : BasePerson 
{ 
    string Address { get; set; } 
    int Score { get; set; } 
} 

そしてリスト:あなたのコードは次のように見えることがありますが、常に本当のタイプを決定することができGetType()typeof()方法を使用して、最後に

IList<BasePerson> list = new List<BasePerson>(); 
list.Add(new NormalPerson()); 
list.Add(new BetterPerson()); 
list.Add(new BestPerson()); 

をそのBasePerson変数参照に

BasePerson person = new NormalPerson(); 
var isNormalPerson = person.GetType() == typeof(NormalPerson); 
// isNormalPerson is true 
var isBestPerson = person.GetType() == typeof(BestPerson); 
// isBestPerson is false 

PersonType enumを使用する必要がある場合は、次のようにクラスを変更できます。

public abstract class BasePerson 
{ 
    public string FirstName { get; set; } 
    public int Age { get; set; } 

    public abstract PersonType Type { get; } 
} 

public class NormalPerson : BasePerson 
{ 
    public override PersonType Type 
    { 
     get { return PersonType.Normal; } 
    } 
} 

public class BetterPerson : BasePerson 
{ 
    public override PersonType PersonType 
    { 
     get { return PersonType.Better; } 
    } 
} 

... 
関連する問題