Частичные занятия в отдельных библиотеках - PullRequest
146 голосов
/ 04 октября 2010

Можно ли иметь две части (одно и то же пространство имен, одно и то же имя класса) в частичном классе в отдельных DLL?

Ответы [ 6 ]

218 голосов
/ 04 октября 2010

С MSDN -Частичные классы и методы :

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

35 голосов
/ 04 октября 2010

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

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

12 голосов
/ 04 октября 2010

Нет, это невозможно. Когда сборка скомпилирована, класс должен быть закончен.

5 голосов
/ 17 мая 2017

В то время как другие ответы дают неприятное «Нет», что любой, кто заходил на эту страницу, не хотел видеть или слышать, меня поразила другая мысль, которая еще не была здесь упомянута. Если бы частичные классы были разрешены для разных сборок, можно было бы получить доступ к закрытым членам существующих типов, которые он не написал, что позволило бы ему манипулировать ими способами, которые не были предназначены первоначальным автором, что поставило под угрозу функциональность всех наследующих классов тоже.

Мало того, эти классы в других сборках (и их дочерние элементы) необходимо будет перекомпилировать, чтобы это работало. Таким образом, логически невозможно разрешить разбиение класса на разные сборки.

5 голосов
/ 08 ноября 2010

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

3 голосов
/ 05 октября 2010

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

...