C # - Интерфейс разделен? - PullRequest
       1

C # - Интерфейс разделен?

2 голосов
/ 11 сентября 2010

У меня есть класс, который имеет метод Add, отличный от других классов, и поэтому не может реализовать тот же интерфейс ... Должен ли я разделить текущий интерфейс, чтобы он тоже мог его использовать, или мне просто создать другой интерфейс для него?

UPDATE:

public interface IProductRepository<T, T2>
    where T : class
    where T2 : class
{
    void Add(T model, int categoryId);
    void Edit(T model, int id);
    void Delete(int id);

    T2 Get(int id);
}

Как вы видите, в приведенном выше интерфейсе есть метод Add, который требует categoryId.

Мой класс Category такой же, как и выше, но без параметра categoryId в методе Add. Должен ли я просто создать новый интерфейс для класса Category?

Ответы [ 2 ]

5 голосов
/ 11 сентября 2010

C # позволяет явно реализовать метод интерфейса:

public class A : IFoo, IBar{
    void IFoo.DoSomething() {
        //DoSomething();
    }
    int IBar.DoSomething() {
        return -1;
    }
}

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

((IFoo) new A()).DoSomething(); // ... may do something different than ...
((IBar) new A()).DoSomething(); // ... would do.
1 голос
/ 11 сентября 2010

Подумайте, для чего это нужно.

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

Возможно, вы захотите провести некоторый рефакторинг для другого класса, чтобы получить определение Add() smillar в интерфейсе.

Если вы не можете выполнить рефакторинг другого класса, и этот класс, похоже, имеет этот интерфейс.Затем вы создаете другой интерфейс или в старом интерфейсе новую функцию типа Add_Extended() для добавления функциональности с другим списком аргументов.

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