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 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 örnek, adlı YearOfBirth
bir ö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 set
okunur 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.