Частичный интерфейс в С#
Предоставляет ли С# частичный интерфейс? то есть в классе 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 расположены в одной сборке.
Ответы
Ответ 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 являются первичными, когда используется генерация кода. Например, когда создается одна часть интерфейса, а другая - пользовательская.
Ответ 4
Да, он делает.
Ответ 5
Подумайте дважды, прежде чем сделать свой интерфейс частью. Может быть, лучше разбить его на две itnerfaces?
Держите свои интерфейсы маленькими и целенаправленными. частичный запах кода.
Ответ 6
Ницца.
Я согласен, что это может быть запах, но я все еще могу думать об одной причине, чтобы сделать это.
В настоящее время я работаю над инфраструктурой MVVM приложения для WPF и Silverlight. И то, с чем я столкнулся, заключается в том, что WPF и Silverlight настолько различны, что вместо использования определений по всему коду частичный интерфейс/класс может фактически разделять различия между двумя фреймворками и по-прежнему содержать код чистым + почти единым источником.
Ответ 7
Да, да. Оба частичных интерфейса определены в одном и том же пространстве имен?
Ответ 8
Короче и просто: YES!
Ответ 9
Смотрите docs, в котором говорится, что он может использоваться для классов, структур или интерфейсов