Как определить интерфейс с методом, который принимает IEnumerable <User>или просто User - PullRequest
0 голосов
/ 15 февраля 2012

У меня есть интерфейс для сообщения:

public interface IMessage
    {
    int Id { get; set; }
    string Body { get; set; }
    string Title { get; set; }
    Employee CreatedBy { get; set; }
    MessageType MessageType { get; set; }

    void Send(IEnumerable<User> recipients);
    // or: void Send(User recipient);
    }

В каждой реализации должен быть метод Send, который отправляет сообщение, но в зависимости от сценария метод Send может отличаться.Т.е., если это личное сообщение, есть только один получатель, и ему также отправлено дополнительное почтовое уведомление этому специальному пользователю, публичные сообщения не делают этого.

Параметр может быть либо списком пользователей, либоодин пользователь.Как я могу это реализовать?

Я знаю, что могу создать список из 1 пользователя для личного сообщения, но лучше всего, если это похоже на перегруженный метод.

Ответы [ 2 ]

5 голосов
/ 15 февраля 2012

Просто перегрузите метод - это верно и для интерфейса:

void Send(IEnumerable<User> recipients);
void Send(User recipient);

Вам необходимо реализовать обе перегрузки в реализациях интерфейса.

1 голос
/ 15 февраля 2012

Вы также можете пометить его с помощью параметров

Send(IEnumerable<User> users)
{...}

void Send(params User[] recipients)
{
    Send((IEnumerable<User>)recipients); // To IEnumerable overload
}

, в этом случае вы можете передать один, несколько или массив Users.

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