面向对象的设计为三种类型,其中两种完全相同
本文关键字:两种 类型 三种 面向对象的 | 更新日期: 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; }
}
}
...