En general, las clases se definen en un mismo archivo fuente (Clase1.cs, Clase2.cs etc) . A veces, esto puede conducir a dificultades, un ejemplo es una clase que está parcialmente generado por un generador de código, y parcialmente modificada y mantenida por el desarrollador.
Este es un escenario muy común, WinForms y diseñadores de formularios Web Forms tiene este problema, haciendo que estas clases sean vulnerables a la modificación accidental de código fuente que no está destinado a ser modificada por el desarrollador. Para resolver este problema, el código generado por el diseñador WinForm está escondido en una región y generalmente nunca es modificada por ningún desarrollador.
C # presenta una característica que puede resolver estos problemas: las clases parciales. Estas son clases que se definen en más de un archivo de origen. De esta manera, parte de una clase parcial podría ser gestionada por el generador de código y una segunda parte de la clase podría ser gestionada por el desarrollador. Cuando el código se compila, el compilador de C # realiza lo que se puede describir como una fusión que combina todas las partes en una clase.
He aquí un ejemplo de código. En primer lugar, podría haber una parte de una clase definida en un archivo de origen:
public partial class Class1
{
public string Test()
{
return "Prueba";
}
}
Entonces, podría haber una segunda fuente de archivos con la siguiente definición de clase:
public partial class Class1
{
public string SomethingElse()
{
return "Alguna otra funcionalidad más";
}
}
La parte importante es la definición de la clase es la palabra clave partial, lo que hace que el nombre duplicado de la clase sea válido, además instruye al compilador a fusionar las dos partes.
Por supuesto, esta fusión puede ser útil para un número de diferentes aplicaciones prácticas, los generadores de código es uno de ellos. Además, las clases parciales se pueden utilizar crear grandes clases en pedacitos más pequeños, que puede ser muy útil en escenarios de desarrollo ya que puede ser una característica útil cuando se trata de agregar funcionalidad a una clase de depuración ya que una de las partes podría tener toda la funcionalidad de depuración, y en otra, el código esperado, una vez que el producto este listo, la clase que contenga el código de depuración podría ser removido sin afectar el código esperado.