Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

Реально ли разделить partial класс на 2 библиотеки

#c_sharp


Собственно вопрос в теме.
Есть dll с классом A

public partial class A: SubA, ISomethingInterface
{
  ...
}


Реально ли дополнить его, подключив другую dll?

public partial class A
{
  public void NewMethod() { }
}

    


Ответы

Ответ 1



Из документации: All partial-type definitions meant to be parts of the same type must be defined in the same assembly and the same module (.exe or .dll file). Partial definitions cannot span multiple modules. Вольный перевод: Все объявления частичных классов означают один тип и должны быть объявлены в одной и той же сборке и модуле. Частичные объявления нельзя разбить на несколько модулей.

Ответ 2



Частичные классы - это фича языка C#, а не рантайма. В бинарных файлах класс уже не может быть разбит на два фрагмента, поэтому все объявления собираются вместе при компиляции. Соответственно, в двух разных библиотеках класс одновременно оказаться не может.

Ответ 3



Если коротко, ответ - нет, нельзя. При компиляции, он в любом случае компилируется в один класс и при его вызове будет создаваться всего один объект класс. Если вам необходимо дополнить класс, как в вашем примере, я рекомендую использовать расширение класса A статическим классом. А именно: public partial class A: SubA, ISomethingInterface { ... } public static class AHerlper { public static void NewMethod(this A) { } } После этого вы сможете вызывать этот самый NewMethod на экземплярах класса A. A a = new A(); a.NewMethod();

Комментариев нет:

Отправить комментарий