Aracılığıyla paylaş


C# işleçleri ve ifadeleri

C# bir dizi işleç sağlar. Bunların çoğu yerleşik türler tarafından desteklenir ve bu türlerin değerleriyle temel işlemleri 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ı bir 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şkilendirme , bir ifadedeki işlemlerin hangi sırada 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];

List<int> numbers = [..collection];
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 deyim olarak kullanılabilir:

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

C# tarafından sunulan diğer ifade türleri ş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:

    int[] scores = { 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.

Operatörler 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 Tekil
x..y Aralık
switch, with switch ve with ifadeleri
x * y, x / y, x % y Çarpan
x + y, x – y Katkı
x << y, x >> y, x >>> y Vardiya
x < y, x > y, x <= y, x >= y, is, as İlişkisel ve tür testleri
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

Mantıksal desen birleştiricilerinin önceliği hakkında bilgi için Desenler makalesinin Öncelik ve mantıksal desenleri denetleme sırasıbölümüne bakın.

İşleç ilişkilendirmesi

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

  • Sol ilişkilendirici işleçler soldan sağa doğru sırayla değerlendirilir. Atama işleçleri ve null birleşim işleçleri dışında, tüm ikili işleçler sol ilişkilendirilir. Ö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çler ?: doğru ilişkilendirilir. Örneğin, x = y = z olarak x = (y = z)değerlendirilir.

Önemli

formunun P?.A0?.A1ifadesinde ise Pnull, ne A1 de A0 değerlendirilir. Benzer şekilde, formunun P?.A0.A1A0 bir ifadesinde null olduğunda P değerlendirilmediğinden, değeri de değildirA0.A1. Daha fazla ayrıntı için C# dil belirtimine bakın.

İş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şkisellik ile ilişkili 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:

İfade 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ğerlendirilip değerlendirilmeydiğini (veya hangisini) 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# dil belirtimi

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

Ayrıca bakınız