Bildirim deyimleri
Bildirim deyimi yeni bir yerel değişken, yerel sabit veya yerel başvuru değişkeni bildirir. Bir yerel değişkeni bildirmek için türünü belirtin ve adını belirtin. Aşağıdaki örnekte gösterildiği gibi, bir deyimde aynı türde birden çok değişken bildirebilirsiniz:
string greeting;
int a, b, c;
List<double> xs;
Bildirim deyiminde, bir değişkeni ilk değeriyle de başlatabilirsiniz:
string greeting = "Hello";
int a = 3, b = 2, c = a + b;
List<double> xs = new();
Yukarıdaki örneklerde bir değişkenin türü açıkça belirtilir. Ayrıca derleyicinin başlatma ifadesinden bir değişkenin türünü çıkarmasına da izin vekleyebilirsiniz. Bunu yapmak için bir türün var
adı yerine anahtar sözcüğünü kullanın. Daha fazla bilgi için Örtük olarak yazılan yerel değişkenler bölümüne bakın.
Yerel sabit bildirmek için aşağıdaki örnekte gösterildiği gibi anahtar sözcüğünü kullanınconst
:
const string Greeting = "Hello";
const double MinLimit = -10.0, MaxLimit = -MinLimit;
Yerel bir sabit bildirdiğinizde, bunu da başlatmanız gerekir.
Yerel başvuru değişkenleri hakkında bilgi için Başvuru değişkenleri bölümüne bakın.
Örtük olarak yazılan yerel değişkenler
Yerel bir değişken bildirdiğinizde, derleyicinin başlatma ifadesinden değişkenin türünü çıkarmasına izin vekleyebilirsiniz. Bunu yapmak için türün var
adı yerine anahtar sözcüğünü kullanın:
var greeting = "Hello";
Console.WriteLine(greeting.GetType()); // output: System.String
var a = 32;
Console.WriteLine(a.GetType()); // output: System.Int32
var xs = new List<double>();
Console.WriteLine(xs.GetType()); // output: System.Collections.Generic.List`1[System.Double]
Yukarıdaki örnekte gösterildiği gibi, örtük olarak yazılan yerel değişkenler kesin olarak yazılır.
Not
Etkin null atanabilir tanıma bağlamında kullandığınızda var
ve başlatma ifadesinin türü bir başvuru türü olduğunda, başlatma ifadesinin türü null atanamaz olsa bile derleyici her zaman null atanabilir bir başvuru türü çıkartır.
bir oluşturucu çağırma ifadesi ile yaygın olarak kullanılırvar
. kullanımı var
, aşağıdaki örnekte gösterildiği gibi bir değişken bildiriminde ve nesne örneği oluşturmada tür adını yinelememenizi sağlar:
var xs = new List<int>();
Alternatif olarak hedef türündeki new
ifadeyi kullanabilirsiniz:
List<int> xs = new();
List<int>? ys = new();
Anonim türlerle çalışırken, örtük olarak yazılan yerel değişkenleri kullanmanız gerekir. Aşağıdaki örnekte, müşterinin adını ve telefon numarasını tutmak için anonim bir tür kullanan sorgu ifadesi gösterilmektedir:
var fromPhoenix = from cust in customers
where cust.City == "Phoenix"
select new { cust.Name, cust.Phone };
foreach (var customer in fromPhoenix)
{
Console.WriteLine($"Name={customer.Name}, Phone={customer.Phone}");
}
Yukarıdaki örnekte değişkenin türünü fromPhoenix
açıkça belirtemezsiniz. Tür ancak IEnumerable<T> bu durumda T
anonim bir türdür ve adını sağlayamazsınız. Bu nedenle kullanmanız var
gerekir. Aynı nedenle, deyiminde foreach
yineleme değişkenini customer
bildirirken kullanmanız var
gerekir.
Örtük olarak yazılan yerel değişkenler hakkında daha fazla bilgi için bkz . Örtük olarak yazılan yerel değişkenler.
Desen eşleştirmede var
anahtar sözcüğü bir var
desende kullanılır.
Başvuru değişkenleri
Bir yerel değişken bildirdiğinizde ve değişkenin türünden ref
önce anahtar sözcüğünü eklediğinizde, bir başvuru değişkeni veya yerel bir ref
değişken bildirirsiniz:
ref int aliasOfvariable = ref variable;
Başvuru değişkeni, başvuran olarak adlandırılan başka bir değişkene başvuran bir değişkendir. Diğer bir ifadeyle, başvuru değişkeni, başvuranı için bir diğer addır . Bir başvuru değişkenine değer atadığınızda, bu değer başvurana atanır. Bir başvuru değişkeninin değerini okuduğunuzda, başvuranın değeri döndürülür. Aşağıdaki örnekte bu davranış gösterilmektedir:
int a = 1;
ref int aliasOfa = ref a;
Console.WriteLine($"(a, aliasOfa) is ({a}, {aliasOfa})"); // output: (a, aliasOfa) is (1, 1)
a = 2;
Console.WriteLine($"(a, aliasOfa) is ({a}, {aliasOfa})"); // output: (a, aliasOfa) is (2, 2)
aliasOfa = 3;
Console.WriteLine($"(a, aliasOfa) is ({a}, {aliasOfa})"); // output: (a, aliasOfa) is (3, 3)
ref
Aşağıdaki örnekte gösterildiği gibi bir başvuru değişkeninin başvuruyu değiştirmek için atama işlecini = ref
kullanın:
void Display(int[] s) => Console.WriteLine(string.Join(" ", s));
int[] xs = [0, 0, 0];
Display(xs);
ref int element = ref xs[0];
element = 1;
Display(xs);
element = ref xs[^1];
element = 3;
Display(xs);
// Output:
// 0 0 0
// 1 0 0
// 1 0 3
Yukarıdaki örnekte, element
başvuru değişkeni ilk dizi öğesinin diğer adı olarak başlatılır. ref
Ardından son dizi öğesine başvurmak için yeniden atanır.
Yerel değişken ref readonly
tanımlayabilirsiniz. Değişkene ref readonly
değer atayamazsınız. Ancak, aşağıdaki örnekte gösterildiği gibi böyle bir başvuru değişkenini yeniden atayabilirsiniz ref
:
int[] xs = [1, 2, 3];
ref readonly int element = ref xs[0];
// element = 100; error CS0131: The left-hand side of an assignment must be a variable, property or indexer
Console.WriteLine(element); // output: 1
element = ref xs[^1];
Console.WriteLine(element); // output: 3
Aşağıdaki örnekte gösterildiği gibi bir başvuru değişkenine başvuru dönüşü atayabilirsiniz:
using System;
public class NumberStore
{
private readonly int[] numbers = [1, 30, 7, 1557, 381, 63, 1027, 2550, 511, 1023];
public ref int GetReferenceToMax()
{
ref int max = ref numbers[0];
for (int i = 1; i < numbers.Length; i++)
{
if (numbers[i] > max)
{
max = ref numbers[i];
}
}
return ref max;
}
public override string ToString() => string.Join(" ", numbers);
}
public static class ReferenceReturnExample
{
public static void Run()
{
var store = new NumberStore();
Console.WriteLine($"Original sequence: {store.ToString()}");
ref int max = ref store.GetReferenceToMax();
max = 0;
Console.WriteLine($"Updated sequence: {store.ToString()}");
// Output:
// Original sequence: 1 30 7 1557 381 63 1027 2550 511 1023
// Updated sequence: 1 30 7 1557 381 63 1027 0 511 1023
}
}
Yukarıdaki örnekte yöntemi, GetReferenceToMax
başv yöntemidir. En büyük değerin kendisini döndürmez, ancak en yüksek değeri tutan dizi öğesinin diğer adı olan bir başvuru döndürür. yöntemi, Run
başvuru değişkenine max
bir başvuru dönüşü atar. Ardından, öğesine max
atayarak örneğin iç depolama alanını store
güncelleştirir. Bir yöntem de tanımlayabilirsiniz ref readonly
. Bir ref readonly
yöntemin çağıranları, başvuru dönüşlerine bir değer atayamaz.
deyiminin foreach
yineleme değişkeni bir başvuru değişkeni olabilir. Daha fazla bilgi için Yineleme deyimleri makalesinin deyim bölümüne bakınforeach
.
Performans açısından kritik senaryolarda, potansiyel olarak pahalı kopyalama işlemlerinden kaçınarak başvuru değişkenlerinin ve getirilerinin kullanımı performansı artırabilir.
Derleyici, bir başvuru değişkeninin başvurudan daha uzun yaşamamasını ve yaşam süresi boyunca geçerli kalmasını sağlar. Daha fazla bilgi için C# dil belirtiminin Başvuru güvenli bağlamlar bölümüne bakın.
Alanlar hakkında ref
bilgi için yapı türleri makalesininref
alanlar bölümüne bakınref
.
kapsamlı başvuru
Bağlamsal anahtar sözcük scoped
, bir değerin ömrünü kısıtlar. scoped
Değiştirici, sırasıyla ref-safe-to-escape veya safe-to-escape ömrünü geçerli yöntemle kısıtlar. Etkili bir şekilde değiştirici eklendiğinde scoped
kodunuzun değişkenin ömrünü uzatmayacağından emin olursunuz.
Bir parametreye veya yerel değişkene uygulayabilirsiniz scoped
. Değiştirici, scoped
türü bir ref struct
olduğunda parametrelere ve yerel ayarlara uygulanabilir. Aksi takdirde, scoped
değiştirici yalnızca yerel başvuru değişkenlerine uygulanabilir. Bu, değiştirici ile ref
bildirilen yerel değişkenleri ve ile in
ref
bildirilen parametreleri veya out
değiştiricileri içerir.
Değiştiriciscoped
, türü ref struct
bir struct
olduğunda , out
parametreleri ve ref
parametrelerinde bildirilen yöntemlere örtük olarak eklenirthis
.
C# dili belirtimi
Daha fazla bilgi için C# dil belirtiminin aşağıdaki bölümlerine bakın:
Değiştirici hakkında scoped
daha fazla bilgi için Düşük düzeyli yapı geliştirmeleri teklif notu'na bakın.