Szukaj…


Wprowadzenie

Klasy częściowe zapewniają nam opcję podziału klas na wiele części i wiele plików źródłowych. Wszystkie części są łączone w jedną klasę podczas kompilacji. Wszystkie części powinny zawierać słowo kluczowe partial , powinny mieć taką samą dostępność. Wszystkie części powinny znajdować się w tym samym zestawie, aby można je było włączyć podczas kompilacji.

Składnia

  • publiczna klasa częściowa MyPartialClass {}

Uwagi

  • Klasy częściowe muszą być zdefiniowane w tym samym zestawie i przestrzeni nazw, co klasa, którą rozszerzają.

  • Wszystkie części klasy muszą używać partial słowa kluczowego.

  • Wszystkie części klasy muszą mieć taką samą dostępność; public / protected / private itp.

  • Jeśli jakakolwiek część używa słowa kluczowego abstract , wówczas połączony typ jest uważany za abstrakcyjny.

  • Jeśli jakakolwiek część używa słowa kluczowego sealed , wówczas połączony typ jest uważany za zapieczętowany.

  • Jeśli jakakolwiek część korzysta z typu podstawowego, wówczas typ łączony dziedziczy po tym typie.

  • Typ łączony dziedziczy wszystkie interfejsy zdefiniowane we wszystkich klasach częściowych.

Częściowe klasy

Klasy częściowe umożliwiają dzielenie deklaracji klas (zwykle na osobne pliki). Częstym problemem, który można rozwiązać za pomocą klas częściowych, jest umożliwienie użytkownikom modyfikowania automatycznie wygenerowanego kodu bez obawy, że ich zmiany zostaną zastąpione, jeśli kod zostanie zregenerowany. Również wielu programistów może pracować na tej samej klasie lub metodach.

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."
        }
    }
}

Metody częściowe

Metoda częściowa polega na definicji w jednej deklaracji częściowej klasy (jako wspólny scenariusz - w generowanej automatycznie) i implementacji w innej deklaracji częściowej klasy.

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."
        }
    }
}

Klasy częściowe dziedziczące z klasy podstawowej

Podczas dziedziczenia z dowolnej klasy bazowej tylko jedna klasa częściowa musi mieć określoną klasę podstawową.

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

// PartialClass2.cs
public partial class PartialClass {}

Można określić tę samą klasę bazową w więcej niż jednym częściowej klasy. Zostanie oznaczony jako zbędny przez niektóre narzędzia IDE, ale kompiluje się poprawnie.

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

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

Nie można określić różnych klas bazowych w wielu klasach częściowych, spowoduje to błąd kompilatora.

// 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow