#c# #oop #design-patterns
#c# #ооп #шаблоны проектирования
Вопрос:
У меня есть три типа людей:
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; }
}
который я могу использовать как для обычного, так и для лучшего, и я могу сделать разделение по типу и
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; }
}
и в конечном итоге: Список….
Это хороший дизайн? что делать, если создан «лучший» экземпляр, но для типа установлено значение Normal. это был бы плохой дизайн?
Комментарии:
1. Добро пожаловать в SO. Какой язык программирования вы используете?
2. 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; }
}
И список:
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; }
}
}
...