2010-10-04 17 views
126

¿Es posible tener dos partes (el mismo espacio de nombres, el mismo nombre de clase) en una clase parcial en DLL por separado?Clases parciales en dlls separados

+0

como los demás dijeron que no es posible, pero hay formas de complementar las clases con un nuevo comportamiento de diferentes fuentes, ¿qué es exactamente lo que quieres hacer en diferentes dlls? – Ozan

+0

En mi caso, quiero agregar un par de métodos estáticos a una clase que está definida en una biblioteca de terceros. Los métodos de extensión no funcionarán y tampoco lo harán las interfaces y la herencia, porque la clase es estática. Después de descubrir que puedes tener clases estáticas parciales, vine aquí para ver si funciona en todos los ensamblajes, pero desafortunadamente parece que esto tampoco funcionará. – Ben

Respuesta

191

De MSDN -Partial Classes and Methods:

Todas las definiciones de tipo parcial destinadas a ser partes del mismo tipo debe ser definido en el mismo ensamblaje y el mismo módulo (.exe o .dll). Las definiciones parciales no pueden abarcar módulos múltiples.

10

No, no es posible. Cuando se compila el ensamblaje, la clase debe completarse.

30

No. Las clases parciales son una función puramente de lenguaje. Cuando se compila un ensamblaje, los archivos se combinan para crear el tipo. No es posible distribuir los archivos en diferentes conjuntos.

Dependiendo de lo que quiera hacer, es posible que pueda usar extension methods para lograr lo que necesita.

3

La pregunta es por qué le gustaría hacer una clase parcial en otro ensamblado? Puede definir clases abstractas e interfaces a través de ensamblajes, tal vez necesite investigar eso.

+5

En mi humilde opinión hay casos válidos, por ejemplo: es posible que desee agregar anotaciones de formulario MVC a una clase de modelo definida en un ensamblaje diferente. El conjunto en sí no sabe en qué contexto se utiliza, por lo que la clase en el conjunto no debe tener ninguna anotación. Sin embargo, podrían agregarse en una clase parcial en el contexto MVC (si fuera posible). – nyi

+3

nyi, ¿por qué no heredas de esa clase y declaras tus atributos en la parte superior? Incluso puede llamarlo con el mismo nombre, si lo prefiere. – Gleno

4

Puede usar métodos de extensión cuando desee agregar un método a una clase en una dll diferente. El único inconveniente de este método es que no puede agregar métodos estáticos.

1

Mientras que otras respuestas proporcionan el desagradable "No" que cualquier persona que aterrizó en esta página no quería ver o escuchar, me llamó la atención otro pensamiento que no ha sido mencionado aquí todavía. Si se permitieran clases parciales en las asambleas, se obtendría acceso a los miembros privados a tipos existentes que no fueron escritos por él y se le permitiría manipularlos de forma no intencionada por el autor original, poniendo en peligro también a todas las clases heredadas.

No solo eso, esas clases en otros ensambles (y sus hijos) tendrían que ser recompiladas para que funcione. Por lo tanto, lógicamente no es posible permitir la división de una clase en diferentes conjuntos.

Cuestiones relacionadas