Как устранить дублирование между интерфейсами - PullRequest
1 голос
/ 10 февраля 2012

У меня есть набор интерфейсов, с которыми я работаю. Это IPatient, IDoctor и IPerson. IPerson содержит общие свойства каждого человека (имя, пол, адрес и т. Д.). Я бы хотел, чтобы IDoctor и IPatient внедрили IPerson, но этого нельзя сделать в C # в соответствии с этим вопросом ..

Есть ли способ устранить эти повторяющиеся свойства между IPatient и IDoctor?

Ответы [ 3 ]

6 голосов
/ 10 февраля 2012

Где дублирование, о котором вы говорите? Если вы посмотрите на пример:

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.

Интерфейсы дают вам просто интерфейс , а не реализацию свойств (и это именно то, что вы хотели бы в большинстве случаев использовать в своих интересах полиморфизма) - если вам нужен реализация этих свойств по умолчанию, вы, вероятно, должны использовать абстрактный базовый класс, который реализует эти свойства.

2 голосов
/ 10 февраля 2012

Это определенно возможно.Связанный вопрос также имеет ограничение, что никакой другой класс не может реализовать интерфейс Сняв это бессмысленное ограничение, мы можем просто сделать:

interface IPerson
{   
    string Name { get; }
}

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

interface IPatient
{
    int PatientSpecificProperty { get; }
}
1 голос
/ 10 февраля 2012

Как показано в предоставленной вами ссылке, IPatient и IDoctor могут оба расширять IPerson, вы просто не можете помешать кому-либо внедрить IPerson без внедрения IPatient или IDoctor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...