Deyimler (C# Programlama Kılavuzu)

Bir programın yaptığı eylemler deyimlerle ifade edildi. Yaygın eylemler, belirli bir koşula bağlı olarak değişkenleri bildirerek, değer atamayı, yöntemleri çağırmayı, koleksiyonlar arasında döngüyü ve bir veya başka bir kod bloğuna dallamayı içerir. Deyimlerin bir programda yürütülme sırasına denetim akışı veya yürütme akışı denir. Denetim akışı, programın çalışma zamanında aldığı girişe nasıl tepki gösterdiğine bağlı olarak bir program her çalıştırılamada değişebilir.

Deyimi noktalı virgülle sona eren tek bir kod satırı veya bir blokta bir dizi tek satırlı deyimden oluşur. Deyim bloğu köşeli ayraç {} içine alınır ve iç içe bloklar içerebilir. Aşağıdaki kodda iki tek satırlı deyim örneği ve çok satırlı deyim bloğu verilmiştir:

    static void Main()
    {
        // Declaration statement.
        int counter;

        // Assignment statement.
        counter = 1;

        // Error! This is an expression, not an expression statement.
        // counter + 1;

        // Declaration statements with initializers are functionally
        // equivalent to  declaration statement followed by assignment statement:
        int[] radii = { 15, 32, 108, 74, 9 }; // Declare and initialize an array.
        const double pi = 3.14159; // Declare and initialize  constant.

        // foreach statement block that contains multiple statements.
        foreach (int radius in radii)
        {
            // Declaration statement with initializer.
            double circumference = pi * (2 * radius);

            // Expression statement (method invocation). A single-line
            // statement can span multiple text lines because line breaks
            // are treated as white space, which is ignored by the compiler.
            System.Console.WriteLine("Radius of circle #{0} is {1}. Circumference = {2:N2}",
                                    counter, radius, circumference);

            // Expression statement (postfix increment).
            counter++;
        } // End of foreach statement block
    } // End of Main method body.
} // End of SimpleStatements class.
/*
   Output:
    Radius of circle #1 = 15. Circumference = 94.25
    Radius of circle #2 = 32. Circumference = 201.06
    Radius of circle #3 = 108. Circumference = 678.58
    Radius of circle #4 = 74. Circumference = 464.96
    Radius of circle #5 = 9. Circumference = 56.55
*/

Deyim türleri

Aşağıdaki tabloda C# içinde çeşitli deyim türleri ve ilişkili anahtar sözcükleri listele birlikte, daha fazla bilgi içeren konuların bağlantıları yer alır:

Kategori C# anahtar sözcükleri /notları
Bildirim deyimleri Bildirim deyimi yeni bir değişken veya sabit içerir. Değişken bildirimi isteğe bağlı olarak değişkene bir değer atayabiliyor. Sabit bir bildirimde atama gereklidir.
İfade deyimleri Bir değeri hesap eden ifade deyimleri, değeri bir değişkende depolamalı.
Seçim deyimleri Seçim deyimleri, belirtilen bir veya daha fazla duruma bağlı olarak farklı kod bölümlerine dallamanıza olanak sağlar. Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:
Yineleme deyimleri Yineleme deyimleri, diziler gibi koleksiyonlarda döngü gerçekleştirmeniz veya belirtilen koşul karşılanana kadar aynı deyimleri tekrar tekrar gerçekleştirmeniz için olanak sağlar. Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:
Atlama deyimleri Jump deyimleri denetimi kodun başka bir bölümüne aktarabilir. Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:
Özel durum işleme deyimleri Özel durum işleme deyimleri, çalışma zamanında oluşan olağanüstü koşullardan başarıyla kurtarmayı sağlar. Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:
İşaretli ve işaretsiz İşaretli ve denetlenmeyen deyimler, sonuç elde edilen değeri tutmayacak kadar küçük bir değişkende depolandığı zaman sayısal işlemlerin taşma neden olup olmadığını belirtmenize olanak sağlar. Daha fazla bilgi için bkz. işaretli ve işaretlenmemiş.
deyimi await Bir yöntemi zaman uyumsuz değiştiriciyle işaretleyeceksiniz, yönteminde await işleci kullanabilirsiniz. Denetim, zaman uyumsuz yöntemde bir ifadeye ulaştığında, denetim çağırana geri döner ve beklenen görev tamamlandıktan sonra yöntemde ilerleme await askıya alınır. Görev tamamlandığında, yürütme yönteminde sürdürebilirsiniz.

Basit bir örnek için Yöntemler'in "Zaman Uyumsuz Yöntemler" bölümüne bakın. Daha fazla bilgi için bkz. Async ve await ile Zaman Uyumsuz Programlama.
deyimi yield return Bir tekrarlayıcı, liste veya dizi gibi bir koleksiyon üzerinde özel yineleme gerçekleştirir. Bir tekrarlayıcı, her yield return bir kez geri dönmek için yield return deyimini kullanır. Bir yield return deyimine ulaşıldı, kodda geçerli konum hatırlanmış olur. Bir sonraki sefer tekrarlayıcı çağrıldıktan sonra yürütme bu konumdan yeniden başlatılır.

Daha fazla bilgi için bkz. Tekrarlayıcılar.
deyimi fixed Sabit deyim, atık toplayıcının taşınabilir bir değişkeni yeniden bulmasını önler. Daha fazla bilgi için bkz. sabit.
deyimi lock Lock deyimi, kod bloklarına erişimi aynı anda yalnızca bir iş parçacığıyla sınırlamanıza olanak sağlar. Daha fazla bilgi için bkz. kilitleme.
Etiketli deyimler Bir deyime etiket ve ardından etiketli deyime atlamak için goto anahtar sözcüğünü kullanabilirsiniz. (Aşağıdaki satırdaki örneğine bakın.)
boş deyimi Boş deyim tek bir noktalı virgülden oluşur. Hiçbir şey yapmadı ve bir deyimin gerekli olduğu ancak herhangi bir eylemin gerçekleştirilene kadar olduğu yerlerde kullanılabilir.

Bildirim deyimleri

Aşağıdaki kod, ilk ataması olan ve olmayan değişken bildirimlerinin örneklerini ve gerekli başlatma ile sabit bildirimini gösterir.

// Variable declaration statements.
double area;
double radius = 2;

// Constant declaration statement.
const double pi = 3.14159;

İfade deyimleri

Aşağıdaki kod atama, atama ile nesne oluşturma ve yöntem çağırma gibi ifade deyimlerinin örneklerini gösterir.

// Expression statement (assignment).
area = 3.14 * (radius * radius);

// Error. Not  statement because no assignment:
//circ * 2;

// Expression statement (method invocation).
System.Console.WriteLine();

// Expression statement (new object creation).
System.Collections.Generic.List<string> strings =
    new System.Collections.Generic.List<string>();

boş deyimi

Aşağıdaki örneklerde boş bir deyim için iki kullanım gösterildi:

void ProcessMessages()
{
    while (ProcessMessage())
        ; // Statement needed here.
}

void F()
{
    //...
    if (done) goto exit;
//...
exit:
    ; // Statement needed here.
}

Katıştırılmış deyimler

Yineleme deyimleri gibi bazı deyimlerde herzaman bunları izleyen katıştırılmış bir deyim vardır. Bu katıştırılmış deyim tek bir deyim veya bir deyim bloğunda köşeli {} ayraç içine alınmış birden çok deyim olabilir. Aşağıdaki örnekte gösterildiği gibi, tek satırlı katıştırılmış deyimler {} bile köşeli ayraç içine alınarak olabilir:

// Recommended style. Embedded statement in  block.
foreach (string s in System.IO.Directory.GetDirectories(
                        System.Environment.CurrentDirectory))
{
    System.Console.WriteLine(s);
}

// Not recommended.
foreach (string s in System.IO.Directory.GetDirectories(
                        System.Environment.CurrentDirectory))
    System.Console.WriteLine(s);

Köşeli ayraç içine alınmış {} ekli deyim, bildirim deyimi veya etiketli deyim olamaz. Bu, aşağıdaki örnekte gösterilmiştir:

if(pointB == true)
    //Error CS1023:
    int radius = 5;

Hatayı düzeltmek için ekli deyimi bir bloğuna koy:

if (b == true)
{
    // OK:
    System.DateTime d = System.DateTime.Now;
    System.Console.WriteLine(d.ToLongDateString());
}

İç içe geçmiş deyim blokları

Deyim blokları aşağıdaki kodda gösterildiği gibi iç içe geçmiş olabilir:

foreach (string s in System.IO.Directory.GetDirectories(
    System.Environment.CurrentDirectory))
{
    if (s.StartsWith("CSharp"))
    {
        if (s.EndsWith("TempFolder"))
        {
            return s;
        }
    }
}
return "Not found.";

Erişilemez deyimleri

Derleyici, denetim akışının herhangi bir koşulda belirli bir deyime hiçbir zaman ulaşa olmadığını belirlerse, aşağıdaki örnekte gösterildiği gibi CS0162 uyarısı üretir:

// An over-simplified example of unreachable code.
const int val = 5;
if (val < 4)
{
    System.Console.WriteLine("I'll never write anything."); //CS0162
}

C# dili belirtimi

Daha fazla bilgi için C# dil belirtimlerinin Deyimler bölümüne bakın.

Ayrıca bkz.