C# işleçleri ve ifadeleri (C# başvurusu)

C# bir dizi işleç sağlar. Bunların çoğu yerleşik türler tarafından desteklenir ve bu türlerdeki değerlerle temel işlemler gerçekleştirmenize olanak sağlar. Bu işleçler aşağıdaki grupları içerir:

Genellikle, bu işleçleri aşırı yükleyebilir , yani kullanıcı tanımlı türün işlenenleri için işleç davranışını belirtebilirsiniz.

En basit C# ifadeleri değişmez değerler (örneğin, tamsayı ve gerçek sayılar) ve değişkenlerin adlarıdır. İşleçleri kullanarak bunları karmaşık ifadeler halinde birleştirebilirsiniz. İşleç önceliği ve ilişkilendiricilik , bir ifadedeki işlemlerin hangi sırayla gerçekleştirildiğini belirler. İşleç önceliği ve ilişkilendirilebilirlik tarafından uygulanan değerlendirme sırasını değiştirmek için parantezleri kullanabilirsiniz.

Aşağıdaki kodda, atamaların sağ tarafında ifade örnekleri verilmiştir:

int a, b, c;
a = 7;
b = a;
c = b++;
b = a + b * c;
c = a >= 100 ? b : c / 10;
a = (int)Math.Sqrt(b * b + c * c);

string s = "String literal";
char l = s[s.Length - 1];

var numbers = new List<int>(new[] { 1, 2, 3 });
b = numbers.FindLast(n => n > 1);

Genellikle, bir ifade bir sonuç üretir ve başka bir ifadeye eklenebilir. void Yöntem çağrısı, sonuç üretmeyen bir ifade örneğidir. Aşağıdaki örnekte gösterildiği gibi yalnızca deyimi olarak kullanılabilir:

Console.WriteLine("Hello, world!");

C# tarafından sunulan diğer ifade türlerinden bazıları şunlardır:

  • Biçimlendirilmiş dizeler oluşturmak için uygun söz dizimi sağlayan ilişkilendirilmiş dize ifadeleri:

    var r = 2.3;
    var message = $"The area of a circle with radius {r} is {Math.PI * r * r:F3}.";
    Console.WriteLine(message);
    // Output:
    // The area of a circle with radius 2.3 is 16.619.
    
  • Anonim işlevler oluşturmanıza olanak sağlayan Lambda ifadeleri:

    int[] numbers = { 2, 3, 4, 5 };
    var maximumSquare = numbers.Max(x => x * x);
    Console.WriteLine(maximumSquare);
    // Output:
    // 25
    
  • Sorgu özelliklerini doğrudan C# dilinde kullanmanıza olanak sağlayan sorgu ifadeleri:

    var scores = new[] { 90, 97, 78, 68, 85 };
    IEnumerable<int> highScoresQuery =
        from score in scores
        where score > 80
        orderby score descending
        select score;
    Console.WriteLine(string.Join(" ", highScoresQuery));
    // Output:
    // 97 90 85
    

Bir yöntem, oluşturucu, özellik, dizin oluşturucu veya sonlandırıcı için kısa bir tanım sağlamak üzere ifade gövdesi tanımı kullanabilirsiniz.

İşleç önceliği

Birden çok işleç içeren bir ifadede, daha yüksek önceliğe sahip işleçler daha düşük önceliğe sahip işleçlerden önce değerlendirilir. Aşağıdaki örnekte çarpma ilk olarak gerçekleştirilir çünkü toplamadan daha yüksek önceliğe sahiptir:

var a = 2 + 2 * 2;
Console.WriteLine(a); //  output: 6

İşleç önceliği tarafından uygulanan değerlendirme sırasını değiştirmek için parantezleri kullanın:

var a = (2 + 2) * 2;
Console.WriteLine(a); //  output: 8

Aşağıdaki tabloda, en yüksek öncelik en düşük olandan başlayarak C# işleçleri listelenmiştir. Her satırdaki işleçler aynı önceliğe sahiptir.

İşleçler Kategori veya ad
x.y, f(x), a[i], x?.y, , x?[y]x++, x--, x!, new, typeof, checked, unchecked, default, nameof, delegate, sizeof, stackalloc, x-y> Birincil
+x, -x, !x, ~x, ++x, --x, ^x, (T)x, await, &x, *x, true ve false Birli
x..y Aralık
switch, switch ve with ifadeleri
x * y, x / y, x % y Çarpımsal
x + y, x – y Toplamsal
x << y, x >> y Shift
x < y, x > y, x <= y, x >= y, is, as İlişkisel ve tür testi
x == y, x != y Eşitlik
x & y Boole mantıksal AND veya bit düzeyinde mantıksal AND
x ^ y Boole mantıksal XOR veya bit düzeyinde mantıksal XOR
x | y Boole mantıksal VEYA veya bit düzeyinde mantıksal OR
x && y Koşullu VE
x || Y Koşullu VEYA
X?? y Null birleşim işleci
C? t : f Koşullu işleç
x = y, x += y, x -= y, x *= y, x /= y, x %= y, x &= y, x |= y, x ^= y, x <<= y, x >>= y, x ?? = y, => Atama ve lambda bildirimi

İşleç ilişkilendirme

İşleçler aynı önceliğe sahip olduğunda, işleçlerin ilişkilendirilmesi işlemlerin hangi sırayla gerçekleştirileceğini belirler:

  • Sol ilişkilendirici işleçler soldan sağa doğru değerlendirilir. Atama işleçleri ve null birleşim işleçleri dışında, tüm ikili işleçler sol ilişkilendiricidir. Örneğin, a + b - c olarak (a + b) - cdeğerlendirilir.
  • Sağ ilişkilendirici işleçler sağdan sola doğru değerlendirilir. Atama işleçleri, null birleşim işleçleri, lambda'lar ve koşullu işleç ?: doğru ilişkilendirilir. Örneğin, x = y = z olarak x = (y = z)değerlendirilir.

İşleç ilişkilendirmesi tarafından uygulanan değerlendirme sırasını değiştirmek için parantezleri kullanın:

int a = 13 / 5 / 2;
int b = 13 / (5 / 2);
Console.WriteLine($"a = {a}, b = {b}");  // output: a = 1, b = 6

İşlenen değerlendirmesi

İşleç önceliği ve ilişkilendiricilik ile ilgili olmayan bir ifadedeki işlenenler soldan sağa değerlendirilir. Aşağıdaki örneklerde işleçlerin ve işlenenlerin değerlendirilme sırası gösterilmektedir:

Expression Değerlendirme sırası
a + b a, b, +
a + b * c a, b, c, *, +
a / b + c * d a, b, /, c, d, *, +
a / (b + c) * d a, b, c, +, /, d, *

Genellikle, tüm işleç işlenenleri değerlendirilir. Ancak, bazı işleçler işlenenleri koşullu olarak değerlendirir. Başka bir deyişle, böyle bir işlecin en soldaki işleneninin değeri, diğer işlenenlerin değerlendirilmesinin gerekip gerekmediğini (veya hangilerinin) değerlendirilmesi gerektiğini tanımlar. Bu işleçler koşullu mantıksal AND (&&) ve OR (||)işleçleri, null birleşim işleçleri ?? ve ??=, null koşullu işleçler ve ve ?[]koşullu işleçlerdir?.?:. Daha fazla bilgi için her işlecin açıklamasına bakın.

C# dili belirtimi

Daha fazla bilgi için C# dil belirtiminin aşağıdaki bölümlerine bakın:

Ayrıca bkz.