Parece que su pregunta es ¿cuál es la diferencia entre
partial class Foo
{
PART ONE
}
partial class Foo
{
PART TWO
}
y
astract class FooBase
{
PART ONE
}
partial class Foo : FooBase
{
PART TWO
}
Si bien pueden parecer algo similar y en algunos casos la construcción de este último podría ser utilizado en lugar de el primero, hay al menos dos problemas con el último estilo:
-1- El tipo FooBase
probablemente tenga que conocer la identidad de el tipo concreto que se suponía que derivaría de él, y siempre usa variables de ese tipo, en lugar de usar el tipo FooBase
. Eso representa un acoplamiento incómodamente cerrado entre los dos tipos.
-2- Si el tipo Foo
es público, el tipo FooBase
también debería ser público. Incluso si todos los constructores de FooBase
son internal
, es posible que el código externo defina las clases que derivan de FooBase
pero no Foo
; construir instancias de tales clases sería difícil, pero no imposible.
Si fuera posible para un tipo derivado ampliar la visibilidad de un tipo base, estos problemas no serían demasiado problemáticos; uno consideraría FooBase
como un identificador "desechable" que aparecería exactamente dos veces: una en su declaración y otra en la línea de declaración para Foo
, y suponga que cada FooBase
sería Foo
disfrazado. El hecho de que FooBase
no pudo usar Foo
miembros de instancias en this
sin un tipocast podría ser fastidioso, pero también podría fomentar una buena partición del código. Sin embargo, dado que no es posible expandir la visibilidad de un tipo base, el diseño de clase abstracta parece asqueroso.
Sé que no tiene nada que ver con la herencia PERO puede hacer lo mismo porque es una especie de efecto secundario de la herencia que puede dividir el código en archivos separados. Sin embargo, probablemente no sea tan agradable o limpio como las clases parciales. Solo estoy tratando de encontrarles un uso. – uriDium
Vaya, lo siento. Fui demasiado rápido en el teclado. ¿Entonces, finalmente, el código de diseñador y su código van a terminar en el mismo archivo? Ahora veo el uso si ese es el caso. Pero probablemente nunca lo use a menos que intente hacer algo similar a eso. – uriDium
Hacen algo bastante diferente a la herencia. Un ejemplo del uso es Visual Studio. El generador de formularios genera un archivo de clase parcial con el código que configura los controles. El código de usuario vive en un archivo separado. Cuando se compilan, estos archivos se combinan en una sola clase. La aplicación realmente destructora de las clases parciales es producir clases que consistan parcialmente, pero no totalmente, en el código generado. Podría hacer algo similar con (por ejemplo) un asignador O/R. – ConcernedOfTunbridgeWells