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ı field
bir 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@
.@field
field
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ı 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; }
}
}
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 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.