Buscar..


Introducción

Las clases parciales nos proporcionan una opción para dividir las clases en varias partes y en múltiples archivos de origen. Todas las partes se combinan en una sola clase durante el tiempo de compilación. Todas las partes deben contener la palabra clave partial , deben ser de la misma accesibilidad. Todas las partes deben estar presentes en el mismo ensamblaje para que se incluya durante el tiempo de compilación.

Sintaxis

  • clase parcial pública MyPartialClass {}

Observaciones

  • Las clases parciales se deben definir dentro del mismo ensamblado y espacio de nombres, como la clase que están extendiendo.

  • Todas las partes de la clase deben usar la palabra clave partial .

  • Todas las partes de la clase deben tener la misma accesibilidad; public / protected / private etc.

  • Si alguna parte utiliza la palabra clave abstract , el tipo combinado se considera abstracto.

  • Si alguna parte utiliza la palabra clave sealed , el tipo combinado se considera sellado.

  • Si alguna parte utiliza un tipo base, el tipo combinado se hereda de ese tipo.

  • El tipo combinado hereda todas las interfaces definidas en todas las clases parciales.

Clases parciales

Las clases parciales proporcionan la capacidad de dividir la declaración de clase (generalmente en archivos separados). Un problema común que puede resolverse con clases parciales es permitir a los usuarios modificar el código generado automáticamente sin temor a que sus cambios se sobrescriban si el código se regenera. También varios desarrolladores pueden trabajar en la misma clase o métodos.

using System;

namespace PartialClassAndMethods
{
    public partial class PartialClass
    {
        public void ExampleMethod() {
            Console.WriteLine("Method call from the first declaration.");
        }
    }

    public partial class PartialClass
    {
        public void AnotherExampleMethod()
        {
            Console.WriteLine("Method call from the second declaration.");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            PartialClass partial = new PartialClass();
            partial.ExampleMethod(); // outputs "Method call from the first declaration."
            partial.AnotherExampleMethod(); // outputs "Method call from the second declaration."
        }
    }
}

Metodos parciales

El método parcial consiste en la definición en una declaración de clase parcial (como un escenario común, en la autogenerada) y la implementación en otra declaración de clase parcial.

using System;

namespace PartialClassAndMethods
{
    public partial class PartialClass // Auto-generated
    {
        partial void PartialMethod();
    }

    public partial class PartialClass // Human-written
    {
        public void PartialMethod()
        {
            Console.WriteLine("Partial method called.");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            PartialClass partial = new PartialClass();
            partial.PartialMethod(); // outputs "Partial method called."
        }
    }
}

Clases parciales heredadas de una clase base

Cuando se hereda de cualquier clase base, solo una clase parcial necesita tener la clase base especificada.

// PartialClass1.cs
public partial class PartialClass : BaseClass {}

// PartialClass2.cs
public partial class PartialClass {}

Se puede especificar la misma clase base en más de una clase parcial. Algunas herramientas IDE lo marcarán como redundante, pero se compila correctamente.

// PartialClass1.cs
public partial class PartialClass : BaseClass {}

// PartialClass2.cs
public partial class PartialClass : BaseClass {} // base class here is redundant

No puede especificar diferentes clases base en varias clases parciales, dará lugar a un error del compilador.

// PartialClass1.cs
public partial class PartialClass : BaseClass {} // compiler error

// PartialClass2.cs
public partial class PartialClass : OtherBaseClass {} // compiler error


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow