面向对象的设计为三种类型,其中两种完全相同

本文关键字:两种 类型 三种 面向对象的 | 更新日期: 2023-09-27 18:11:34

我有三种类型的人:

    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 enum PersonType
{
    Normal = 0,
    Better = 1,
    Best  = 2
}
public interface IPerson
{
    PassengerType Type { get; set; }
    string FirstName { get; set; }
    int Age { get; set; }
}

public class Person:IPerson
{
    public PassengerType Type { get; set; }
    public string FirstName { get; set; }
    public int Age { get; set; }
}

我可以在Normal和Better中使用它我可以根据类型和

进行区分
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; }
}

最终:List ....

这个设计好吗?如果创建了"最佳"实例,但类型设置为Normal怎么办?这是一个糟糕的设计吗?

面向对象的设计为三种类型,其中两种完全相同

一般来说比较类类型就足够了。您的代码可能看起来像这样:

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; }
}

和列表:

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

最后,使用GetType()typeof()方法,您总是可以确定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; }
   }
}
...