Подтвердить что ты не робот

Частичный интерфейс в С#

Предоставляет ли С# частичный интерфейс? то есть в классе ManagerFactory1.cs, у меня есть

public partial interface IManagerFactory
{
    // Get Methods
    ITescoManager GetTescoManager();
    ITescoManager GetTescoManager(INHibernateSession session);
}

и в классе ManagerFactory.cs у меня есть:

public partial interface IManagerFactory
{
    // Get Methods
    IEmployeeManager GetEmployeeManager();
    IEmployeeManager GetEmployeeManager(INHibernateSession session);
    IProductManager GetProductManager();
    IProductManager GetProductManager(INHibernateSession session);
    IStoreManager GetStoreManager();
    IStoreManager GetStoreManager(INHibernateSession session);
}

Оба ManagerFactory и ManagerFactory1 расположены в одной сборке.

4b9b3361

Ответ 1

Самый простой способ - просто попробовать:)

Но да, разрешены частичные интерфейсы.

Допустимые местоположения для модификатора partial (с ссылками на спецификации С# 3.0):

  • Классы (10.1.2)
  • Структуры (11.1.2)
  • Интерфейсы (13.1.2)
  • Методы (С# 3.0+) (10.2.7; 10.6.8)

В разделе 10.2 спецификации содержится большинство общих деталей для частичных типов.

Недопустимые местоположения:

  • Перечисления
  • Делегаты

Ответ 2

Это так, но важным вопросом будет почему?

Существуют частичные классы, позволяющие расширять автоматически сгенерированный код. VS может сгенерировать файл формы или код позади, или Linq to SQL accessor, и вы можете расширить его с помощью частичного.

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

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

Ответ 3

Да, да.

Частичные классы и методы (руководство по программированию на С#) в MSDN

Ограничения:

  • Все определения интерфейса частичного типа, предназначенные для части того же типа, должны быть изменены с помощью partial
  • Частичный модификатор может появляться только перед ключевым словом interface.
  • Все определения частичного типа, которые должны быть частью одного и того же типа, должны быть определены в одной и той же сборке и в том же модуле (файл .exe или .dll).

Частичные intefaces являются первичными, когда используется генерация кода. Например, когда создается одна часть интерфейса, а другая - пользовательская.

Ответ 5

Подумайте дважды, прежде чем сделать свой интерфейс частью. Может быть, лучше разбить его на две itnerfaces?

Держите свои интерфейсы маленькими и целенаправленными. частичный запах кода.

Ответ 6

Ницца.

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

В настоящее время я работаю над инфраструктурой MVVM приложения для WPF и Silverlight. И то, с чем я столкнулся, заключается в том, что WPF и Silverlight настолько различны, что вместо использования определений по всему коду частичный интерфейс/класс может фактически разделять различия между двумя фреймворками и по-прежнему содержать код чистым + почти единым источником.

Ответ 7

Да, да. Оба частичных интерфейса определены в одном и том же пространстве имен?

Ответ 8

Короче и просто: YES!

Ответ 9

Смотрите docs, в котором говорится, что он может использоваться для классов, структур или интерфейсов