Klasy częściowe i metody (Przewodnik programowania w języku C#)
Jest możliwe podzielić definicji klasy lub struct, interfejsu lub metody, za pośrednictwem dwóch lub więcej plików źródłowych.Każdy plik źródłowy zawiera sekcja w definicji typu lub metody i wszystkie części są połączone podczas kompilowania aplikacji.
Klasy częściowe
Istnieje kilka sytuacji, gdy pożądane jest dzielenie definicji klasy:
Podczas pracy nad dużymi projektami, rozłożenie klasy na osobnych plików umożliwia wielu programistów do pracy z nim w tym samym czasie.
Podczas pracy z automatycznie wygenerowane źródło, kod można dodać do klasy, bez konieczności ponownego tworzenia pliku źródłowego.Podczas tworzenia Windows Forms, kod otoką usługi sieci Web i tak dalej, Visual Studio używa tego podejścia.Można utworzyć kod, który używa tych klas, bez konieczności modyfikowania pliku utworzonego przez program Visual Studio.
Aby podzielić definicji klasy, użyj częściowe modyfikator słowa kluczowego, jak pokazano poniżej:
public partial class Employee
{
public void DoWork()
{
}
}
public partial class Employee
{
public void GoToLunch()
{
}
}
partial Słowa kluczowego wskazuje, że inne części klasy, struktury, lub interfejsu mogą być zdefiniowane w obszarze nazw.Wszystkie części muszą używać partial słowa kluczowego.Wszystkie części muszą być dostępne w kompilacji do końcowego typ formularza.Wszystkie części muszą mieć tych samych ułatwień dostępu, takich jak public, private, i tak dalej.
Jeśli jakakolwiek część jest zadeklarowany jako abstrakcyjny, całe typu jest uznane abstrakcyjny.Jakakolwiek część zadeklarowana zamkniętych, a następnie cały typ jest uważany za sealed.Jeżeli jakakolwiek część deklaruje typu podstawowego, typu całego dziedziczy tej klasy.
Wszystkie części, które określają klasy podstawowej musi wyrazić zgodę, ale części, które pominąć klasy podstawowej nadal dziedziczą typu podstawowego.Części można określić w różnych interfejsach podstawowych i końcowego typu implementuje wszystkich interfejsów wymienionych przez częściowe deklaracje.Wszelkie klasy, struktury lub członków interfejsu zadeklarowane w definicji częściowej są dostępne dla wszystkich innych części.Typ końcowego to kombinacja wszystkich części w czasie kompilacji.
[!UWAGA]
partial Modyfikator nie jest dostępny w deklaracji obiektu delegowanego lub wyliczenia.
Poniższy przykład pokazuje, że zagnieżdżonych typów może być częściowe, nawet jeśli są one zagnieżdżone wewnątrz typu nie jest częściowe sam.
class Container
{
partial class Nested
{
void Test() { }
}
partial class Nested
{
void Test2() { }
}
}
W czasie kompilacji atrybuty definicje typów częściowe są scalane.Na przykład należy wziąć pod uwagę następujące deklaracje:
[SerializableAttribute]
partial class Moon { }
[ObsoleteAttribute]
partial class Moon { }
Są one równoważne następujące deklaracje:
[SerializableAttribute]
[ObsoleteAttribute]
class Moon { }
Poniżej są scalane ze wszystkich definicji typu częściowego:
Komentarze XML
interfejsy
Parametr typu rodzajowego atrybutów
atrybuty klas
Członkowie
Na przykład należy wziąć pod uwagę następujące deklaracje:
partial class Earth : Planet, IRotate { }
partial class Earth : IRevolve { }
Są one równoważne następujące deklaracje:
class Earth : Planet, IRotate, IRevolve { }
Ograniczenia
Istnieje kilka reguł, zgodnie z którą pracujesz z definicji częściowej klasy:
Wszystkie definicje typu częściowe można w części tego samego typu, muszą zostać zmienione z partial.Na przykład następujące deklaracje klas wygenerować błąd:
public partial class A { } //public class A { } // Error, must also be marked partial
partial Modyfikator może się znajdować tylko bezpośrednio przed słowa kluczowe class, struct, lub interface.
Zagnieżdżone typy częściowe są dozwolone w definicji typu częściowego, jak pokazano w poniższym przykładzie:
partial class ClassWithNestedClass { partial class NestedClass { } } partial class ClassWithNestedClass { partial class NestedClass { } }
Wszystkie definicje typu częściowe można w części tego samego typu, należy zdefiniować tego samego zestawu i tym samym module (plik .exe lub .dll).Definicje częściowe nie może obejmować wiele modułów.
Nazwa klasy i parametry typu rodzajowego musi odpowiadać na wszystkie definicje typu częściowe.Typy rodzajowe mogą być częściowe.Każda deklaracja częściowa, należy użyć tej samej nazwy parametrów w tej samej kolejności.
Następujące słowa kluczowe w definicji typu częściowe są opcjonalne, ale jeśli jest obecny na jedną definicję typu częściowego, nie może powodować konfliktu z słów kluczowych, określonych w innej definicji częściowej dla tego samego typu:
Klasa podstawowa
Nowy modyfikator (części zagnieżdżonych)
Rodzajowy ograniczenia
Aby uzyskać więcej informacji, zobacz Ograniczenia dotyczące parametrów typu (Przewodnik programowania w języku C#).
Przykład 1
Opis
W poniższym przykładzie, pola i konstruktora klasy CoOrds, są zadeklarowane w jednej definicji częściowej klasy i Państwa Członkowskiego, PrintCoOrds, jest zadeklarowany w innej definicji częściowej klasy.
Kod
public partial class CoOrds
{
private int x;
private int y;
public CoOrds(int x, int y)
{
this.x = x;
this.y = y;
}
}
public partial class CoOrds
{
public void PrintCoOrds()
{
Console.WriteLine("CoOrds: {0},{1}", x, y);
}
}
class TestCoOrds
{
static void Main()
{
CoOrds myCoOrds = new CoOrds(10, 15);
myCoOrds.PrintCoOrds();
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
// Output: CoOrds: 10,15
Przykład 2
Opis
Poniższy przykład pokazuje, że można też opracować częściowe struktur i interfejsów.
Kod
partial interface ITest
{
void Interface_Test();
}
partial interface ITest
{
void Interface_Test2();
}
partial struct S1
{
void Struct_Test() { }
}
partial struct S1
{
void Struct_Test2() { }
}
Częściowe metod
Częściowej klasy lub struktury mogą zawierać metodę częściowe.Jedną część klasy zawiera podpis metody.Fakultatywne wdrożenie może być określona w części tej samej lub innej części.Jeżeli wykonania nie jest podany, następnie metody i wszystkie wywołania metody są usuwane w czasie kompilacji.
Częściowe metody umożliwiają Realizator części klasy zdefiniować metody, podobne do zdarzenia.Realizator części klasy można zdecydować, czy do implementacji metody, lub nie.Jeśli metoda nie jest zaimplementowana, a następnie kompilator usuwa metodę podpisu i wszystkie wywołania metody.Wywołania metody, łącznie z wynikami, wszelkie występujące od oceny argumentów wywołania, nie mają wpływu w czasie wykonywania.W związku z tym dowolny kod w klasie częściowe swobodnie można korzystać metodę częściowe, nawet jeśli wykonania nie jest podany.Jeśli metoda jest wywoływana, lecz niewykonanych, wynikiem będzie bez błędów w czasie kompilacji lub run-time.
Metody częściowe są szczególnie przydatne, jako sposób, aby dostosować wygenerowany kod.Pozwalają one na nazwę metody podpisu do rezerwacji, tak aby wygenerowany kod może wywoływać metodę, ale programista może zdecydować, czy do implementacji metody.Znacznie jak klasy częściowe częściowe metod włączyć oraz kod utworzony przez generator kodu utworzony przez ludzi dewelopera wspólną pracę bez kosztów w czasie wykonywania.
Deklaracja częściowa metoda składa się z dwóch części: definicja i wprowadzenia w życie.Mogą one w odrębnych częściach częściowej klasy lub w tej samej części.Jeśli istnieje zgłoszenie nie wykonania, a następnie kompilator optymalizuje away zarówno definiowanie deklaracji i wszystkie wywołania metody.
// Definition in file1.cs
partial void onNameChanged();
// Implementation in file2.cs
partial void onNameChanged()
{
// method body
}
Metoda częściowych deklaracji musi zaczynać się od kontekstowe słowa kluczowego częściowe i metoda musi zwracać void.
Częściowe metody są niejawnie prywatnego, i dlatego nie może być wirtualnego.
Częściowe metody nie mogą być extern, ponieważ obecność jednostka określa, czy są definiując lub wdrażając.
Częściowe metody może mieć statyczne i niebezpieczne modyfikatorów.
Częściowe metody mogą być rodzajowy.Ograniczenia wprowadzane są na definiowanie deklaracji częściowych metody i opcjonalnie może być powtórzone na jeden wykonawczych.Parametr i wpisz nazwy parametrów nie być takie same, w deklaracji wykonawczych w jednej definiujących.
Można wprowadzać delegować do częściowego metody, które zostały zdefiniowane i wdrożone, ale nie do metody częściowe, tylko zdefiniowanego.
Specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.
Zobacz też
Informacje
Klasy (Przewodnik programowania w języku C#)
Struktury (Przewodnik programowania w języku C#)
Interfejsy (Przewodnik programowania w języku C#)
partial (typ) (odwołanie w C#)