Yapıları Kullanma (C# Programlama Kılavuzu)
struct Türü gibi hafif nesneler gösteren uygun Point, Rectangle, ve Color.Noktası olarak göstermek yalnızca kolay olmasına rağmen bir sınıfı ile Auto-Implemented özelliklerini, bir struct bazı senaryolarda daha verimli olabilir.Örneğin, 1000 dizisi bildirmek Point nesneleri tahsis ek bellek; her nesneyi başvurmak için Bu durumda, bir yapı daha ucuz olacaktır.Çünkü .NET Framework adında bir nesne içeren Point, bu örnekteki yapı bunun yerine "CoOrds" olarak adlandırılır.
public struct CoOrds
{
public int x, y;
public CoOrds(int p1, int p2)
{
x = p1;
y = p2;
}
}
Bir yapının varsayılan (parametresiz) kurucusu tanımlamak için hatadır.Ayrıca, bir yapının gövdesini örnek alanı başlatmak için bir hata olur.Yapı üyeleri yalnızca parametreli oluşturucuyu kullanarak veya yapı bildirildikten sonra üyeleri tek tek erişim başlatılamıyor.Herhangi bir özel veya herhangi bir şekilde erişilemez üye oluşturucu içinde başlatılabilir.
Yapı kullanarak nesne oluşturduğunuzda Yeni işleç, oluşturulan ve uygun kurucusu çağrılır.Sınıflar, yapılar kullanmadan oluşturulabilir new işleci.Böyle bir durumda, ayırma daha verimli hale getirir hiçbir oluşturucu çağrısı yok.Ancak, alanların atanmamış kalır ve tüm alanları başlatılıncaya dek nesnesi kullanılamaz.
Üye olarak bir başvuru türü bir yapı içeriyorsa, varsayılan kurucu üyenin açıkça çağrılması gerekir, aksi halde üye atanmamış kalır ve yapı kullanılan.(Derleyici Hatası CS0171 sonuçlanır.)
Sınıfları gibi yapılar için hiçbir mirası yoktur.Bir yapı başka bir yapı veya sınıfından devralamaz ve temel sınıf olamaz.Yapılar, ancak temel sınıftan kalıtımla Object.Bir yapı arabirimleri uygulayabilir ve tam olarak sınıfları gibi yapar.
Anahtar sözcüğünü kullanarak bir sınıfın bildirimini yapamazsınız struct.C# [NULL]'ta sınıflara ve anlam olarak farklıdır.Bir başvuru türü bir sınıf olduğu sırada bir yapı bir değer türüdür.Daha fazla bilgi için bkz: Değer türleri.
Başvuru türü mantıkları gerekli olmadıkça, bir yapı bunun yerine bildirin, küçük bir sınıf daha verimli bir şekilde sistem tarafından ele alınabilir.
Örnek 1
Tanımlama
Bu örnek gösterir struct kullanarak hem varsayılan hem de parametreli yapıcılar başlatma.
Kod
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
*/
Örnek 2
Tanımlama
Bu örnek yapılar için benzersiz bir özelliği gösterir.Kullanmadan bir CoOrds nesnesi oluşturur new işleci.Sözcüğü yerine, struct sözcüğü class, program derlenmez.
Kod
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
Ayrıca bkz.
Başvuru
Sınıflar ve Yapılar (C# Programlama Kılavuzu)
Yapılar (C# Programlama Kılavuzu)