假设我有以下两个类:
public class Person
{
public string Name { get; set; }
public string Address { get; set; }
}
public class Customer: Person
{
public string CustomerNumber { get; set; }
public string PaymentTerms { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我有一个我想成为客户的人,据我所知,我有三个选项,我希望得到关于哪个是最好的以及任何其他选项的建议,也许使用新的C#4中的动力学东西.
我可以向Customer添加构造函数或属性,它接受Person并将值分配给基类,例如
public Customer(Person person)
{
base.Name = person.Name;
base.Address = person.Address;
}
Run Code Online (Sandbox Code Playgroud)
或者我可以像这样实现一个不整洁的set访问器:
public Person Person
{
set
{
Name = value.Name;
Address = value.Address;
}
}
Run Code Online (Sandbox Code Playgroud)
或者我可以将Person聚合到客户中,如下所示:
public class Customer
{
public Person Person { get; set; }
public string CustomerNumber { get; set; }
public string PaymentTerms { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
最后一个对我来说是最好的,除了总是不得不访问Customer.Person.Name,而不仅仅是Customer.Name.
我个人会去作曲,是的(你的最后一个选择).请注意,您始终可以提供"帮助属性":
public string Name { get { return Person.Name; } }
Run Code Online (Sandbox Code Playgroud)
实际上,您可以为所需的所有属性执行此操作,并且永远不会将Person属性暴露给外部世界.
另一方面,如果您希望能够将a 作为a - 将其传递给具有参数的方法,则继承非常有用.我通常用接口完成那种事情; 你可以有两个和两个实现的接口.继承引入了各种设计决策,当你没有进行继承时,这些决策根本就没有出现(或者更简单).CustomerPersonPersonIPersonCustomerPerson