Yapıları kullanma (C# Programlama Kılavuzu)Using structs (C# Programming Guide)

struct türü Point, Rectangleve Colorgibi hafif nesneleri temsil etmek için uygundur.The struct type is suitable for representing lightweight objects such as Point, Rectangle, and Color. Bir noktayı Otomatik uygulanmış özelliklerlebir sınıf olarak temsil etmek uygun olsa da, bazı senaryolarda bir Yapı daha verimli olabilir.Although it is just as convenient to represent a point as a class with Auto-Implemented Properties, a struct might be more efficient in some scenarios. Örneğin, 1000 Point nesnelerden oluşan bir dizi bildirirseniz, her bir nesneye başvurmak için ek bellek ayırabilirsiniz; Bu durumda, bir yapı daha pahalı olur.For example, if you declare an array of 1000 Point objects, you will allocate additional memory for referencing each object; in this case, a struct would be less expensive. .NET zaten Pointadlı bir nesne içerdiğinden, bu örnekteki yapı bunun yerine Coords olarak adlandırılmıştır.Because .NET already contains an object called Point, the struct in this example is named Coords instead.

public struct Coords
{
    public int x, y;

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

Bir struct için parametresiz bir Oluşturucu tanımlamak hatadır.It is an error to define a parameterless constructor for a struct. Bir yapı gövdesinde örnek alanı başlatmak da bir hatadır.It is also an error to initialize an instance field in a struct body. Yalnızca parametreli bir oluşturucuyu, örtük, parametresiz oluşturucuyu, nesne başlatıcısınıkullanarak veya yapı oluşturulduktan sonra üyelere ayrı ayrı erişerek, dışarıdan erişilebilen yapı üyelerini başlatabilirsiniz.You can initialize externally accessible struct members only by using a parameterized constructor, the implicit, parameterless constructor, an object initializer, or by accessing the members individually after the struct is declared. Herhangi bir özel veya başka şekilde erişilemeyen üye, oluşturucuların yalnızca kullanımını gerektirir.Any private or otherwise inaccessible members require the use of constructors exclusively.

New işlecini kullanarak bir struct nesnesi oluşturduğunuzda, oluşturulur ve uygun Oluşturucu oluşturucunun imzasınagöre çağırılır.When you create a struct object using the new operator, it gets created and the appropriate constructor is called according to the constructor's signature. Sınıfların aksine, yapılar new işleci kullanılmadan örneklenebilir.Unlike classes, structs can be instantiated without using the new operator. Böyle bir durumda, bir Oluşturucu çağrısı yoktur ve bu da ayırmayı daha verimli hale getirir.In such a case, there is no constructor call, which makes the allocation more efficient. Ancak alanlar atanmamış olarak kalır ve tüm alanlar başlatılana kadar nesne kullanılamaz.However, the fields will remain unassigned and the object cannot be used until all of the fields are initialized. Bu, özellikler aracılığıyla değerleri almak veya ayarlamak için bir değer içerir.This includes the inability to get or set values through properties.

Parametresiz oluşturucuyu kullanarak bir yapı nesnesi örneği oluşturursanız, tüm Üyeler varsayılan değerlerinegöre atanır.If you instantiate a struct object using the parameterless constructor, all members are assigned according to their default values.

Bir yapı için parametrelere sahip bir Oluşturucu yazarken, tüm üyeleri açık olarak başlatmalısınız; Aksi takdirde bir veya daha fazla üye atanmamış olarak kalır ve yapı birimi CS0171, derleyici hatası üretirken kullanılamaz.When writing a constructor with parameters for a struct, you must explicitly initialize all members; otherwise one or more members remain unassigned and the struct cannot be used, producing compiler error CS0171.

Sınıflar için olduğu gibi yapılar için devralma yoktur.There is no inheritance for structs as there is for classes. Yapı, başka bir struct veya sınıftan devralınabilir ve bir sınıfın temeli olamaz.A struct cannot inherit from another struct or class, and it cannot be the base of a class. Ancak yapılar, temel sınıftan devralınır Object.Structs, however, inherit from the base class Object. Bir struct, arabirimler uygulayabilir ve tam olarak sınıfların yaptığı şekilde yapılır.A struct can implement interfaces, and it does that exactly as classes do.

Anahtar sözcüğünü kullanarak bir sınıf bildiremezsiniz struct.You cannot declare a class using the keyword struct. İçinde C#, sınıflar ve yapılar anlamsal olarak farklıdır.In C#, classes and structs are semantically different. Yapı bir değer türüdür, ancak bir sınıf bir başvuru türüdür.A struct is a value type, while a class is a reference type. Daha fazla bilgi için bkz. değer türleri ve başvuru türleri.For more information, see Value types and Reference types.

Başvuru türü semantiklerine ihtiyacınız yoksa, bunun yerine bir yapı olarak bildirirseniz küçük bir sınıf sistem tarafından daha verimli bir şekilde işlenebilir.Unless you need reference-type semantics, a small class may be more efficiently handled by the system if you declare it as a struct instead.

Örnek 1Example 1

Bu örnekte, hem parametresiz hem de parametreli oluşturucular kullanılarak struct başlatma gösterilmektedir.This example demonstrates struct initialization using both parameterless and parameterized constructors.

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.
        var coords1 = new Coords();
        var coords2 = new Coords(10, 10);

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

        Console.Write("Coords 2: ");
        Console.WriteLine($"x = {coords2.x}, y = {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 2Example 2

Bu örnek, yapılar için benzersiz olan bir özelliği gösterir.This example demonstrates a feature that is unique to structs. new işlecini kullanmadan bir CoOrds nesnesi oluşturur.It creates a Coords object without using the new operator. Word struct sözcüğünü classWord ile değiştirirseniz, program derlenmez.If you replace the word struct with the word class, the program will not compile.

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 = {coords1.x}, y = {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.See also