在这种情况下,继承的构成?

时间:2012-11-12 19:12:04

标签: c# inheritance composition

想要在这里征集构成而不是遗产是否有意义,如果是这样,那么这是一个很好的方法。

我有这样的界面:

public interface IUser
{
  string FirstName {get; set}
  string LastName  {get; set}
}

还有一个'高级'用户界面,它与IUser具有相同的字段,但有一些附加功能。 PhoneNumber,EmailAddress等

IAdvancedUser接口是否应继承自IUser并添加自己的属性,或者在其中包含IUser的实例,并使用setter注入实例化该成员,请注意好?如果是后者,是否存在一些在这些情况下运行良好的.Net / C#习语 - 例如,通过包装或其他方法将IUser成员公开为IAdvancedUser成员?

这些是DTO对象,其中没有方法,只有属性。

1 个答案:

答案 0 :(得分:2)

答案是:IAdvancedUser必须始终是IUser吗?

在这种情况下:不,使用继承。

但是,“composition over inheritance”不适用于接口,因为它们不遵循与类相同的规则。

你可以这样做:

interface IAdvancedFeatures
interface IUser
interface IAdvancedUser : IUser, IAdvancedFeatures

通过这种方式,您可以启用任何功能来实现高级功能,而不是强制它成为用户,而在其他情况下,每个人都必须是高级用户。

我通常会尝试将接口视为定义功能而不是角色。所以你可以说你应该赞成组合(比如我的IAdvancedUser),但不是和类(你在内部组成)的意义相同。