如何消除接口之间的重复

时间:2012-02-10 17:04:53

标签: c# .net inheritance interface

我有一组我正在使用的接口。他们是IPatient,IDoctor和IPerson。 IPerson包含每个人的共享属性(姓名,性别,地址等)。我希望IDoctor和IPatient能够实现IPerson但this can't be done in C# according to this question ..

有没有办法消除IPatient和IDoctor之间的这些重复属性?

3 个答案:

答案 0 :(得分:6)

你说的重复在哪里?如果你看一个例子:

interface IPerson
{
    string Name { get; set; }
}

interface IDoctor : IPerson
{
    string Specialty {get; set; }
}

class Doctor : IDoctor
{
   public string Name { get; set; }
   public string Specialty {get; set;}
}

这里没有重复 - Doctor只需要实现一次Name属性,当然也必须实现Specialty属性。

接口只为您提供接口,而不是属性的实现(这正是您在大多数情况下希望利用多态性所需的) - 如果您需要这些属性的默认实现,您应该使用实现这些属性的抽象基类。

答案 1 :(得分:2)

这绝对是可能的。链接的问题也有没有其他类可以实现接口的约束。我们可以简单地刮掉那些无意义的约束:

interface IPerson
{   
    string Name { get; }
}

interface IDoctor: IPerson
{
    int DoctorSpecificProperty { get; }
}

interface IPatient
{
    int PatientSpecificProperty { get; }
}

答案 2 :(得分:1)

如您所提供的链接所示,IPatient和IDoctor都可以扩展IPerson,您无法阻止某人在未实施IPatient或IDoctor的情况下实施IPerson。