English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Clases y métodos parciales (Partial) de C#

En C#, se puede usar la palabra clave partial para dividir la implementación de una clase, estructura, método o interfaz en varios archivos .cs. Al compilar el programa, el compilador combinará todas las implementaciones procedentes de varios archivos .cs.

Vea los archivos employeeprops.cs y employeemethods.cs que contienen la clase Employee.

public partial class Employee
{
    public int EmpId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}
public partial class MyPartialClass
{
    public Employee(int Id, string name)
    {
        this.EmpId = Id;
        this.Name = name;
    }
    public void DisplayEmployeeInfo()
    {
        Console.WriteLine(this.EmpId + "" this.FirstName + "" + this.LastName);
    }
    public void Save(int id, string firstName, string lastName)
    {
        Console.WriteLine("Guardado!");
    }
}

En el ejemplo anterior, EmployeeProps.cs contiene las propiedades de la clase Employee, mientras que employeememethods.cs contiene todos los métodos de la clase Employee. Estas clases se compilarán en una clase Employee.

public class Employee
{
    public int EmpId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
    public Employee(int Id, string name)
    {
        this.EmpId = Id;
        this.Name = name;
    }
    public void DisplayEmployeeInfo()
    {
        Console.WriteLine(this.EmpId + "" this.FirstName + "" + this.LastName);
    }
    public void Save(int id, string firstName, string lastName)
    {
        Console.WriteLine("Guardado!");
    }
}

Reglas de clase parcial

  • Todas las definiciones de clases parciales deben estar en el mismo ensamblado y espacio de nombres.

  • Todos los fragmentos deben tener la misma visibilidad, como pública o privada, entre otros.

  • Si cualquier fragmento se declara como abstracto, sellado o tipo base, entonces toda la declaración de clase se declarará del mismo tipo.

  • Diferentes fragmentos pueden tener diferentes tipos básicos, por lo que la clase final heredará todos los tipos básicos.

  • El modificador partial solo puede aparecer antes de las palabras clave class, struct o interface.

  • Permiten la nesting de tipos parciales.

Métodos parciales

Las clases o estructuras parciales pueden contener un método que se puede dividir en dos archivos de clase parciales o estructuras. Uno de los archivos .cs debe contener la firma del método, mientras que los otros archivos pueden contener la implementación opcional del método parcial. La declaración y la implementación del método deben tener la palabra clave partial.

public partial class Employee
{
    public int EmpId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
    partial void GenerateEmployeeId();
}
public partial class MyPartialClass
{
    partial void GenerateEmployeeId()
    {
        this.EmpId = random();
    }
}

Arriba, el archivo employeeprops.cs contiene la firma del método DisplayEmployeeInfo, mientras que el archivo employeemethods.cs contiene su implementación. El compilador combinará todos los fragmentos en uno solo durante la compilación.

Requiere incluir la firma del método parcial, pero no es necesario proporcionar la implementación. Si se llama al método pero no se ha implementado, no habrá errores en tiempo de compilación o ejecución.

Reglas de métodos parciales

  • Los métodos parciales deben usar la palabra clave partial y deben retornar void.

  • Los métodos parciales pueden tener parámetros in o ref sin parámetros out.

  • Los métodos parciales son métodos privados implícitos, por lo tanto, no pueden ser métodos virtuales.

  • Los métodos parciales pueden ser métodos estáticos.

  • Los métodos parciales pueden ser métodos genéricos.