init (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 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 ö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; }
     }
}

Genellikle erişimci, init önceki örnekte olduğu gibi bir değer atayan tek bir deyimden oluşur. nedeniyleinit, aşağıdakiler çalışmaz:

var john = new Person_InitExample
{
    YearOfBirth = 1984
};

john.YearOfBirth = 1926; //Not allowed, as its value can only be set once in the constructor

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 sahip olur:

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;
    }
}

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;
    }
}

Erişimci init , aşağıdaki örnek kodda gösterildiği gibi otomatik tahmin edilen özelliklerde de kullanılabilir:

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

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.