Sdílet prostřednictvím


Částečné třídy a metody (Průvodce programováním v C#)

Je možné rozdělit definici třídy nebo struct, rozhraní nebo metodu přes dva nebo více zdrojových souborů.Každý zdrojový soubor obsahuje část definice typu nebo metodu a všechny části jsou zkombinovány zkompilování aplikace.

Částečné třídy

Definice třídy rozdělení je žádoucí existuje několik situací:

  • Při práci na velkých projektech, šíří samostatné soubory třídy umožňuje více programátorům pracovat současně.

  • Při práci s automaticky generované zdroje, lze přidat kód třídy bez nutnosti znovu vytvořit zdrojový soubor.Visual Studio používá tento přístup vytváří model Windows Forms, kód wrapper webové služby a podobně.Můžete vytvořit kód, který používá tyto třídy bez nutnosti změnit soubor vytvořený pomocí aplikace Visual Studio.

  • Chcete-li rozdělit definici třídy, použijte částečné klíčové slovo, modifikátor, jak je znázorněno zde:

public partial class Employee
{
    public void DoWork()
    {
    }
}

public partial class Employee
{
    public void GoToLunch()
    {
    }
}

partial Klíčové slovo označuje, že ostatní části třída, struktura, nebo rozhraní lze definovat v oboru názvů.Všechny části musí používat partial klíčové slovo.Všechny části musí být k dispozici kompilace a konečné typ formuláře.Všechny části musí mít stejné usnadnění, například public, private, atd.

Pokud jakékoli části deklarován jako abstraktní, potom celý typ považován abstraktní.Pokud jakékoli části je deklarována uzavřených, potom celý typ považován za uzavřeny.Pokud některé části prohlašuje základní typ, celý typ zdědí třídy.

Všech částí určit základní třídy musí souhlasit, ale částí, které vynechat základní třída dědí stále základního typu.Částí můžete zadat různé základní rozhraní a konečné typ implementuje všechna rozhraní podle částečné deklarace.Jakékoli třída, struktura nebo členy rozhraní deklarované v částečné definice jsou k dispozici všechny ostatní části.Poslední typ je kombinací všech částí v době kompilace.

[!POZNÁMKA]

partial Modifikátor není k dispozici v prohlášení delegáta nebo výčet.

Následující příklad ukazuje, že vnořené typy mohou být částečně, i když není typ, který je vnořen do částečné sám.

class Container
{
    partial class Nested
    {
        void Test() { }
    }
    partial class Nested
    {
        void Test2() { }
    }
}

V době kompilace atributy definice typu částečné sloučeny.Například zvažte následující prohlášení:

[SerializableAttribute]
partial class Moon { }

[ObsoleteAttribute]
partial class Moon { }

Jsou ekvivalentní následující prohlášení:

[SerializableAttribute]
[ObsoleteAttribute]
class Moon { }

Ze všech definic částečný typ jsou sloučeny následující text:

  • Komentáře XML

  • rozhraní

  • Parametr typu Obecné atributy

  • atributy třídy

  • Členové

Například zvažte následující prohlášení:

partial class Earth : Planet, IRotate { }
partial class Earth : IRevolve { }

Jsou ekvivalentní následující prohlášení:

class Earth : Planet, IRotate, IRevolve { }

Omezení

Existuje několik pravidla při práci s definicemi částečné třídy:

  • Je třeba upravit všechny definice typu částečně určeny částí stejného typu jako s partial.Například následující třída prohlášení generovat chybu:

    public partial class A { }
    //public class A { }  // Error, must also be marked partial
    
  • partial Modifikátor lze umístit pouze bezprostředně před klíčová slova class, struct, nebo interface.

  • Vnořených částečných typů jsou povoleny v definicích částečný typ, jak je znázorněno v následujícím příkladu:

    partial class ClassWithNestedClass
    {
        partial class NestedClass { }
    }
    
    partial class ClassWithNestedClass
    {
        partial class NestedClass { }
    }
    
  • Všechny definice typu částečně určeny jako částí stejného typu musí být definovány ve stejné sestavení a stejného modulu (soubor s příponou EXE nebo DLL).Částečná definice nemůže zahrnovat více modulů.

  • Na všechny definice částečný typ musí odpovídat názvu třídy a parametry obecného typu.Obecné typy mohou být částečné.Každá částečná deklarace musí použít stejné názvy parametrů ve stejném pořadí.

  • Následující klíčová slova na částečný typ definice jsou nepovinné, ale pokud je k dispozici na jednu definici částečný typ nelze konfliktu s klíčová slova na jinou částečnou definici pro stejný typ:

Příklad 1

Description

V následujícím příkladu pole a v konstruktoru třídy CoOrds, jsou deklarovány v jednu definici dílčí třídy a člen, PrintCoOrds, je deklarován v jiné definici dílčí třídy.

Kód

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

Příklad 2

Description

Následující příklad ukazuje, že je také možné vyvinout částečné struktur a rozhraní.

Kód

partial interface ITest
{
    void Interface_Test();
}

partial interface ITest
{
    void Interface_Test2();
}

partial struct S1
{
    void Struct_Test() { }
}

partial struct S1
{
    void Struct_Test2() { }
}

Částečné metody

Částečné metoda může obsahovat dílčí třídy nebo struct.Jedna část třídy obsahuje podpis metody.Nepovinné provádění mohou být definovány v části stejného nebo jiného.Pokud provádění není zadán, pak metoda všechna volání metody budou odebrány a v době kompilace.

Částečné metody umožňují rozhodující část třídy definovat metody podobné události.Rozhodující část třídy se můžete rozhodnout, zda implementovat metodu či nikoli.Pokud metoda není implementována, pak kompilátor odebere metodu podpisu a všechna volání metody.Volání metody, včetně žádné výsledky, které by vznikly z hodnocení argumentů volání, nemají žádný efekt v době spuštění.Proto libovolný kód v částečné třídy volně slouží částečné metoda i v případě, že provádění není zadán.Pokud metoda je volána, ale není implementována, nebudou žádné chyby kompilace a spuštění.

Částečné metody jsou zvláště užitečné jako přizpůsobit generovaný kód.Umožnit název metody a podpis rezervovány, takže generovaný kód může volat metodu, ale vývojář může rozhodnout, zda implementovat metodu.Mnohem jako částečné třídy povolit částečné metody vytvořené Generátor kódu a kód vytvořený lidskou vývojář společně pracovat bez spuštění náklady.

Metoda částečné prohlášení skládá ze dvou částí: definice a provedení.Tyto mohou být v oddělené části částečné třídy nebo ve stejné části.Pokud není k dispozici žádné prohlášení provádění poté kompilátor optimalizuje pryč i definování prohlášení a všechna volání metody.

// Definition in file1.cs
partial void onNameChanged();

// Implementation in file2.cs
partial void onNameChanged()
{
  // method body
}
  • Deklarace metody částečné musí začínat kontextové klíčové slovo částečné a metoda musí vrátit void.

  • Částečné metody mohou mít ref , ale není mimo parametry.

  • Implicitně jsou částečné metody soukromé, a proto nemůže být virtuální.

  • Částečné metody nemohou být extern, protože přítomnost textu určuje, zda jsou definování nebo provádění.

  • Částečné metody mohou mít statické a nebezpečných modifikátory.

  • Částečné metody mohou být obecný.Omezení jsou uváděny na definiční částečné metoda prohlášení a volitelně na jeden prováděcí opakovat.Názvy parametrů a typ parametru nemají stejný v prováděcích prohlášení v jako jedna definice.

  • Můžete provést delegáta částečné metodu, která byla definována a implementovány, ale není částečné metodu, která pouze definice.

Specifikace jazyka C#

Další informace najdete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.

Viz také

Referenční dokumentace

Třídy (Průvodce programováním v C#)

Struktury (Průvodce programováním v C#)

Rozhraní (Průvodce programováním v C#)

partial (typ) (Referenční dokumentace jazyka C#)

Koncepty

Průvodce programováním v C#