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#)