Sdílet prostřednictvím


Použití struktur (Průvodce programováním v C#)

struct Typ je vhodný pro zjednodušené objekty představující jako Point, Rectangle, a Color.Přestože je stejně pohodlné představuje bod jako třídy s Vlastnosti Auto-Implemented, struktury může být v některých případech efektivnější.Například deklarovat matici 1000 Point objekty přidělí paměť pro odkazování na každý objekt; struktura by v tomto případě levnější.Protože .NET Framework obsahuje objekt s názvem Point, struktura v tomto příkladu je pojmenované místo "CoOrds".

public struct CoOrds
{
    public int x, y;

    public CoOrds(int p1, int p2)
    {
        x = p1;
        y = p2;
    }
}

Jedná se o chybu, k definování výchozí konstruktor (bez parametrů) pro struct.Je také Chyba inicializace pole instance v těle struct.Členy struktury lze inicializovat pouze pomocí Parametrizovaný konstruktor nebo přístup k členům jednotlivě po deklaraci struct.Soukromé nebo jinak nepřístupný členů může být inicializována pouze v konstruktoru.

Když vytvoříte objekt struct pomocí nové operátor, získá vytvořen a je zavolána odpovídající konstruktor.Na rozdíl od tříd, struktur může být vytvořena bez použití new operátor.V takovém případě je volání konstruktoru bez rozdělení umožňuje zefektivnit.Však zůstanou nepřiřazené pole a objekt nelze použít, dokud všechna pole inicializována.

Struktura obsahuje typ odkazu jako člen, výchozí konstruktor člen musí explicitně vyvolán, jinak zůstane člen nepřiřazené a struct nelze použít.(Výsledkem chyba kompilátoru CS0171.)

Není žádná dědičnost struktur, jako je pro třídy.Struktury nemohou dědit z jiné třídy nebo struktury a nelze ji základní třídy.Struktury, však dědí ze základní třídy Object.Struktura můžete implementovat rozhraní a udělá to přesně jako třídy.

Nelze deklarovat třídu pomocí klíčového slova struct.V jazyce C# jsou sémanticky různých tříd a struktur.Struktura je hodnotový typ, zatímco třída je odkazový typ.Další informace naleznete v Typy hodnot.

Pokud potřebujete sémantiku typu odkazu, malé třídy mohou efektivněji zacházet systém Pokud deklarujete jej jako struktura místo.

Příklad 1

Description

Tento příklad ukazuje struct inicializace pomocí výchozí a parametry.

Kód

public struct CoOrds
{
    public int x, y;

    public CoOrds(int p1, int p2)
    {
        x = p1;
        y = p2;
    }
}
// Declare and initialize struct objects. 
class TestCoOrds
{
    static void Main()
    {
        // Initialize:   
        CoOrds coords1 = new CoOrds();
        CoOrds coords2 = new CoOrds(10, 10);

        // Display results:
        Console.Write("CoOrds 1: ");
        Console.WriteLine("x = {0}, y = {1}", coords1.x, coords1.y);

        Console.Write("CoOrds 2: ");
        Console.WriteLine("x = {0}, y = {1}", coords2.x, coords2.y);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/* Output:
    CoOrds 1: x = 0, y = 0
    CoOrds 2: x = 10, y = 10
*/

Příklad 2

Description

Tento příklad ukazuje funkci, která je jedinečná struktur.Vytvoří objekt CoOrds bez použití new operátor.Je-li nahradit slovo struct slovo class, program nebude zkompilován.

Kód

public struct CoOrds
{
    public int x, y;

    public CoOrds(int p1, int p2)
    {
        x = p1;
        y = p2;
    }
}
// Declare a struct object without "new." 
class TestCoOrdsNoNew
{
    static void Main()
    {
        // Declare an object:
        CoOrds coords1;

        // Initialize:
        coords1.x = 10;
        coords1.y = 20;

        // Display results:
        Console.Write("CoOrds 1: ");
        Console.WriteLine("x = {0}, y = {1}", coords1.x, coords1.y);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
// Output: CoOrds 1: x = 10, y = 20

Viz také

Referenční dokumentace

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

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

Koncepty

Průvodce programováním v C#