2009-09-18 16 views
13

Pregunto esto porque considero que es una característica bastante peligrosa distribuir la definición de clase, por lo que no puede estar seguro si sabe todo al respecto. Incluso si encuentro tres definiciones parciales, ¿cómo sé que no hay un cuarto en alguna parte?C# - ¿Cuáles son los beneficios de las clases "parciales"?

Soy nuevo en C# pero he pasado 10 años con C++, ¿tal vez por eso estoy agitado?

De todos modos, el concepto "parcial" debe tener un gran beneficio, que obviamente me falta. Me encantaría aprender más sobre la filosofía detrás de esto.

EDITAR: Lo sentimos, perdimos this duplicate al buscar publicaciones existentes.

+0

"¿cómo sé que no hay un cuarto en algún lugar?" El problema aquí no son las clases parciales, sino la falta de conocimiento del proyecto que está compilando. – mackenir

+0

http://stackoverflow.com/questions/612831/practical-usage-of-partial-keyword-in-c –

+0

@mackenir: Trate de presentar ese argumento a un desarrollador de mantenimiento asignado a más de 100000 líneas de proyecto de código. – sharkin

Respuesta

31

Las clases parciales son útiles cuando se utiliza la generación de código. Si desea modificar una clase generada (en lugar de heredarla), corre el riesgo de perder los cambios cuando se regenera el código. Si puede definir sus métodos adicionales, etc. en un archivo separado, las partes generadas de la clase se pueden volver a crear sin anudar su código artesanal.

+2

+ 1 - de hecho, esta característica es utilizada por la herramienta de creación de formularios que viene con Visual Studio. – ConcernedOfTunbridgeWells

11

La gran ventaja es ocultar el código generado por computadora (por el diseñador).
Eric Lippert tiene una publicación reciente sobre el blog partial-keyword en general.

Otro uso podría ser dar a las clases anidadas su propio archivo.

3

Dos personas que editan la misma clase y código de diseñador autogenerado son las dos características inmediatas que puedo ver que fueron resueltas por clases y métodos parciales.

Tener código generado por el diseñador en un archivo separado es mucho más fácil de trabajar con en comparación con 1.1, donde el código a menudo podría ser destrozado por Visual Studio (en formularios de Windows).

Visual Studio todavía hace un lío de sincronizar el archivo de diseñador, el código detrás y el archivo de diseño con ASP.NET.

+0

Dos personas que editan la misma clase deben usar control de versiones, no clases parciales. – svinto

+0

O ambos, y guarda un dolor de cabeza de combinación si se trata de una gran clase de legado con miles de líneas. –

+0

No sugiero que sea la forma correcta de trabajar, pero esa era una de las ideas detrás de las clases parciales: http://msdn.microsoft.com/en-us/library/wa80x488(VS.80).aspx –

3

Otro punto es que cuando una clase implementa múltiples interfaces, puede dividir las implementaciones de interfaz en diferentes archivos.

De modo que cada archivo de código solo tiene el código que pertenece a la implementación de la interfaz. Es según separación de preocupaciones concepto.

2

Si tiene algún tipo de clase absurdamente grande que por alguna razón no puede o no puede dividirse lógicamente en clases más pequeñas, puede al menos físicamente dividirlas en varios archivos para trabajar con más eficacia. Esencialmente, puede ver pequeños trozos a la vez evitando desplazarse hacia arriba y hacia abajo.

Esto podría aplicarse al código heredado que tal vez debido a alguna política misteriosa no puede interferir con la API existente debido a numerosas y arraigadas dependencias.

No necesariamente es el mejor uso de clases parciales, pero sin duda le da una opción alternativa para organizar código que de otra manera no podría modificar.

1

tal vez es demasiado tarde, pero por favor déjame añadir mis 2 centavos también:

* .Cuando trabajando en grandes proyectos, la difusión de una clase sobre archivos separados permite que varios programadores para trabajar en él al mismo tiempo.

*. Puede escribir fácilmente su código (para funcionalidad extendida) para una clase generada VS.NET. Esto le permitirá escribir el código de su propia necesidad sin interferir con el código generado por el sistema

Cuestiones relacionadas