¿Es posible tener dos partes (mismo espacio de nombre, mismo nombre de clase) para una clase parcial en archivos DLL separados?
¿Es posible tener dos partes (mismo espacio de nombre, mismo nombre de clase) para una clase parcial en archivos DLL separados?
Respuestas:
De MSDN - Clases y métodos parciales :
Todas las definiciones de tipo parcial destinadas a ser partes del mismo tipo deben definirse en el mismo ensamblaje y el mismo módulo (archivo .exe o .dll). Las definiciones parciales no pueden abarcar múltiples módulos.
No. Las clases parciales son una característica puramente del lenguaje. Cuando se compila un ensamblaje, los archivos se combinan para crear el tipo. No es posible distribuir los archivos en diferentes ensamblajes.
Sin embargo, dependiendo de lo que desee hacer, es posible que pueda usar métodos de extensión para lograr lo que necesita.
No, no es posible. Cuando se compila el ensamblaje, la clase debe estar terminada.
Si bien otras respuestas proporcionan el desagradable "No" que nadie que desembarcó en esta página no quería ver ni oír, me llamó la atención otro pensamiento que aún no se ha mencionado aquí. Si se permitieran clases parciales en las asambleas, se obtendría acceso a miembros privados de tipos existentes que no fueron escritos por él, lo que le permite manipularlos de formas que no fueron intencionadas por el autor original, poniendo en peligro la funcionalidad de todas las clases heredadas. también.
No solo eso, esas clases en otras asambleas (y sus hijos) tendrían que volver a compilarse para que funcione. Por lo tanto, lógicamente no es posible permitir dividir una clase en diferentes ensamblajes.
Puede usar métodos de extensión cuando desee agregar un método a una clase en un dll diferente. El único inconveniente de este método es que no puede agregar métodos estáticos.
La pregunta es ¿por qué querrías hacer una clase parcial en otro ensamblaje? Puede definir clases abstractas e interfaces a través de ensamblajes, tal vez necesite investigar eso.
Probablemente solo desee crear una clase Wrapper dentro de su propia biblioteca, alrededor de la clase en la biblioteca de la tercera parte. Luego agregue cualquier funcionalidad a la clase contenedora.