Alanlar (C# Programlama Kılavuzu)

Alan, doğrudan bir sınıf veya yapıda bildirilen herhangi bir türün değişkenidir. Alanlar, içeren türlerinin üyeleridir.

Bir sınıf veya yapı örnek alanlarına, statik alanlara veya her iki alana da sahip olabilir. Örnek alanları bir türün örneğine özeldir. örneği alanı Folan bir sınıfınız Tvarsa, türünde Tiki nesne oluşturabilir ve diğer nesnedeki değeri F etkilemeden her nesnedeki değerini değiştirebilirsiniz. Buna karşılık, statik bir alan türün kendisine aittir ve bu türün tüm örnekleri arasında paylaşılır. Statik alana yalnızca tür adını kullanarak erişebilirsiniz. Statik alana bir örnek adıyla erişirseniz CS0176 derleme zamanı hatası alırsınız.

Genel olarak, alanlar için bildirmeniz private veya protected erişilebilirliği bildirmeniz gerekir. Türünüzün istemci koduna sunduğu veriler yöntemler, özellikler ve dizin oluşturucular aracılığıyla sağlanmalıdır. İç alanlara dolaylı erişim için bu yapıları kullanarak geçersiz giriş değerlerine karşı koruma sağlayabilirsiniz. Genel bir özellik tarafından kullanıma sunulan verileri depolayan özel alan, yedekleme deposu veya yedekleme alanı olarak adlandırılır. Alanları bildirebilirsiniz public , ancak sonra türünüzü kullanan kodun bu alanı geçersiz bir değere ayarlamasını veya nesnenin verilerini başka bir şekilde değiştirmesini önleyemezsiniz.

Alanlar genellikle birden fazla tür yöntemi için erişilebilir olması ve tek bir yöntemin ömründen daha uzun süre depolanması gereken verileri depolar. Örneğin, takvim tarihini temsil eden bir tür üç tamsayı alanına sahip olabilir: ay için bir, gün için bir ve yıl için bir tane. Tek bir yöntemin kapsamı dışında kullanılmayan değişkenler, yöntem gövdesinde yerel değişkenler olarak bildirilmelidir.

Alanlar, erişim düzeyi ve ardından türü ve ardından alanın adı belirtilerek sınıf veya yapı bloğunda bildirilir. Örneğin:

public class CalendarEntry
{

    // private field (Located near wrapping "Date" property).
    private DateTime _date;

    // Public property exposes _date field safely.
    public DateTime Date
    {
        get
        {
            return _date;
        }
        set
        {
            // Set some reasonable boundaries for likely birth dates.
            if (value.Year > 1900 && value.Year <= DateTime.Today.Year)
            {
                _date = value;
            }
            else
            {
                throw new ArgumentOutOfRangeException("Date");
            }
        }
    }

    // public field (Generally not recommended).
    public string? Day;

    // Public method also exposes _date field safely.
    // Example call: birthday.SetDate("1975, 6, 30");
    public void SetDate(string dateString)
    {
        DateTime dt = Convert.ToDateTime(dateString);

        // Set some reasonable boundaries for likely birth dates.
        if (dt.Year > 1900 && dt.Year <= DateTime.Today.Year)
        {
            _date = dt;
        }
        else
        {
            throw new ArgumentOutOfRangeException("dateString");
        }
    }

    public TimeSpan GetTimeSpan(string dateString)
    {
        DateTime dt = Convert.ToDateTime(dateString);

        if (dt.Ticks < _date.Ticks)
        {
            return _date - dt;
        }
        else
        {
            throw new ArgumentOutOfRangeException("dateString");
        }
    }
}

Bir örnekteki bir alana erişmek için örnek adından sonra bir nokta ekleyin ve ardından alanında olduğu gibi instancename._fieldNamebir nokta ekleyin. Örneğin:

CalendarEntry birthday = new CalendarEntry();
birthday.Day = "Saturday";

Alan bildirildiğinde atama işleci kullanılarak bir alana başlangıç değeri verilebilir. Alanı "Monday"için otomatik olarak atamak Day için, örneğin, aşağıdaki örnekte olduğu gibi bildirebilirsinizDay:

public class CalendarDateWithInitialization
{
    public string Day = "Monday";
    //...
}

Alanlar, nesne örneğinin oluşturucusunun çağrılmadan hemen önce başlatılır. Oluşturucu bir alanın değerini atarsa, alan bildirimi sırasında verilen değerlerin üzerine yazar. Daha fazla bilgi için bkz . Oluşturucuları Kullanma.

Not

Alan başlatıcı diğer örnek alanlarına başvuramaz.

Alanlar , , private, protected, internal, protected internalveya private protectedolarak publicişaretlenebilir. Bu erişim değiştiricileri, türdeki kullanıcıların alanlara nasıl erişebileceğini tanımlar. Daha fazla bilgi için bkz . Erişim Değiştiricileri.

Bir alan isteğe bağlı olarak bildirilebilir static. Statik alanlar, türün hiçbir örneği olmasa bile çağıranların kullanımına açıktır. Daha fazla bilgi için bkz . Statik Sınıflar ve Statik Sınıf Üyeleri.

Bir alan bildirilebilir readonly. Salt okunur bir alana yalnızca başlatma sırasında veya oluşturucuda bir değer atanabilir. Bir static readonly alan sabite benzer, ancak C# derleyicisinin derleme zamanında, yalnızca çalışma zamanında statik salt okunur bir alanın değerine erişimi yoktur. Daha fazla bilgi için bkz . Sabitler.

Bir alan bildirilebilir required. Gerekli bir alan oluşturucu tarafından veya bir nesne oluşturulduğunda bir nesne başlatıcısı tarafından başlatılmalıdır. Özniteliğini System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute , gerekli tüm üyeleri başlatan herhangi bir oluşturucu bildirimine eklersiniz.

Değiştirici required aynı alanda değiştiriciyle readonly birleştirilemiyor. Ancak özellik yalnızca ve init olabilirrequired.

C# 12 ile başlayarak, Birincil oluşturucu parametreleri alanları bildirmeye alternatiftir. Türünüzün başlatma sırasında sağlanması gereken bağımlılıkları olduğunda, bu bağımlılıkları sağlayan bir birincil oluşturucu oluşturabilirsiniz. Bu parametreler, türlerinizdeki bildirilen alanlar yerine yakalanabilir ve kullanılabilir. record Türlerde, birincil oluşturucu parametreleri genel özellikler olarak ortaya çıkar.

C# dili belirtimi

Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.

Ayrıca bkz.