Aracılığıyla paylaş


Anahtar init sözcüğü (C# Başvurusu)

anahtar sözcüğü, init bir özellik veya dizin oluşturucuda bir erişimci yöntemini tanımlar. Yalnızca init ayarlayıcı özelliğine veya dizin oluşturucu öğesine yalnızca nesne oluşturma sırasında bir değer atar. , init değişmezliği zorlar, böylece nesne başlatıldıktan sonra değiştirilemez. Erişimci init , ilk değeri ayarlamak için bir nesne başlatıcı kullanmak üzere kod çağırmayı etkinleştirir. Karşıtlık olarak, yalnızca bir ayarlayıcı ile otomatik olarak uygulanan bir get özellik bir oluşturucu çağrılarak başlatılmalıdır. Aksesuara sahip bir private set özellik, inşaat sonrasında değiştirilebilir, ancak yalnızca sınıfta değiştirilebilir.

Aşağıdaki kod, otomatik olarak uygulanan bir özellikteki bir erişimciyi gösterir init :

class Person_InitExampleAutoProperty
{
    public int YearOfBirth { get; init; }
}

Parametre doğrulaması sağlamak için erişimcilerden birini uygulamanız gerekebilir. C# 13'te önizleme özelliği olarak sunulan anahtar sözcüğünü kullanarak field bunu yapabilirsiniz. anahtar sözcüğü, field söz konusu özellik için derleyici tarafından sentezlenen yedekleme alanına erişir. Aşağıdaki örnekte erişimcinin init parametre aralığını doğruladığı bir özellik gösterilmektedir value "

class Person_InitExampleFieldProperty
{
    public int YearOfBirth
    {
        get;
        init
        {
            field = (value <= DateTime.Now.Year)
                ? value
                : throw new ArgumentOutOfRangeException(nameof(value), "Year of birth can't be in the future");
        }
    }
}

Önemli

Anahtar field sözcük, C# 13'teki bir önizleme özelliğidir. Bağlamsal anahtar sözcüğü kullanmak için preview proje dosyanızda .NET 9 kullanıyor field olmanız ve öğenizi <LangVersion> olarak ayarlamanız gerekir.

adlı fieldbir alanı olan bir sınıfta anahtar sözcük özelliğini kullanırken field dikkatli olmalısınız. Yeni field anahtar sözcük, özellik erişimcisi kapsamında adlı field bir alanın gölgesini oluşturur. Değişkenin adını değiştirebilir veya tanımlayıcıya olarak başvurmak field için belirteci kullanabilirsiniz@.@fieldfield Anahtar sözcüğü için özellik belirtimini field okuyarak daha fazla bilgi edinebilirsiniz.

Erişimci init , ifade gövdeli üye olarak kullanılabilir. Örnek:

class Person_InitExampleExpressionBodied
{
    private int _yearOfBirth;

    public int YearOfBirth
    {
        get => _yearOfBirth;
        init => _yearOfBirth = value;
    }
}

Aşağıdaki örnek, adlı YearOfBirthbir özelliğin hem a get hem init de erişimcisini tanımlar. Özellik değerini yedeklemek için adlı _yearOfBirth özel bir alan kullanır.

class Person_InitExample
{
     private int _yearOfBirth;

     public int YearOfBirth
     {
         get { return _yearOfBirth; }
         init { _yearOfBirth = value; }
     }
}

Erişimci init , çağıranları özelliği ayarlamaya zorlamaz. Bunun yerine, çağıranların daha sonra değiştirilmesini yasaklarken bir nesne başlatıcı kullanmasına izin verir. Çağıranları required bir özelliği ayarlamaya zorlamak için değiştiriciyi ekleyebilirsiniz. Aşağıdaki örnekte, yedekleme alanı olarak null atanabilir değer türüne sahip yalnızca bir init özellik gösterilmektedir. Çağıran özelliği başlatmazsa YearOfBirth , bu özellik varsayılan null değere sahiptir:

class Person_InitExampleNullability
{
    private int? _yearOfBirth;

    public int? YearOfBirth
    {
        get => _yearOfBirth;
        init => _yearOfBirth = value;
    }
}

Çağıranları başlangıçta null olmayan bir değer ayarlamaya zorlamak için, aşağıdaki örnekte gösterildiği gibi değiştiriciyi eklersiniz required :

class Person_InitExampleNonNull
{
    private int _yearOfBirth;

    public required int YearOfBirth
    {
        get => _yearOfBirth;
        init => _yearOfBirth = value;
    }
}

Aşağıdaki örnekte, salt private setokunur ve init özelliği arasındaki ayrım gösterilmektedir. Hem özel küme sürümü hem de salt okunur sürüm, çağıranların ad özelliğini ayarlamak için eklenen oluşturucuyu kullanmasını gerektirir. Sürüm, private set bir kişinin örnek oluşturulduğunda adını değiştirmesine izin verir. Sürüm init bir oluşturucu gerektirmez. Çağıranlar, bir nesne başlatıcı kullanarak özellikleri başlatabilir:

class PersonPrivateSet
{
    public string FirstName { get; private set; }
    public string LastName { get; private set; }
    public PersonPrivateSet(string first, string last) => (FirstName, LastName) = (first, last);

    public void ChangeName(string first, string last) => (FirstName, LastName) = (first, last);
}

class PersonReadOnly
{
    public string FirstName { get; }
    public string LastName { get; }
    public PersonReadOnly(string first, string last) => (FirstName, LastName) = (first, last);
}

class PersonInit
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
}
PersonPrivateSet personPrivateSet = new("Bill", "Gates");
PersonReadOnly personReadOnly = new("Bill", "Gates");
PersonInit personInit = new() { FirstName = "Bill", LastName = "Gates" };

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.