
Yukarıda verilen C# koduna göre aşağıdaki şıklardan hangisi yanlıştır?
Kaynak: https://lolonolo.com/2026/03/16/c-programlama-2024-2025-vize-sorulari/
C# Programlama 2024-2025 Vize Soruları
C# dilinde değişkenlerin bellekte kapladıkları alan ve alabilecekleri maksimum-minimum değerler kritik öneme sahiptir. Tam sayı veri tiplerinin (işaretli olanların) küçükten büyüğe sıralanışı byte < short < int < long şeklindedir. Bir atama işleminde veri tipleri arasında dönüşüm (casting) yapılabilir. Küçük bir veri tipi büyük bir tipe dönüştürülürken derleyici bunu otomatik olarak yapar; buna “örtük (implicit)” dönüşüm denir. Büyük tipin küçük tipe dönüştürülmesinde ise “(int)” gibi “aşikar (explicit)” dönüşüm gereklidir. Örneğin, sbyte a = -128; byte b = (byte)a; işleminde işaretli bir sayıdan işaretsiz bir tipe dönüşüm yapılır, bu da programın tutarsız çıktı vermesine neden olur.
Veri tiplerine geçerli atamalar yaparken dikkat edilmelidir. Geçerli bir atama olan int t = 0x05AD;, onaltılık (hexadecimal) bir sayıyı temsil eder. String veri tiplerine çok satırlı atama yaparken “”” (üç tırnak) kullanımı modern C#’ta geçerlidir. Ancak object veri tipinde bir değişken tanımlandığında değişkene değer atanması zorunlu değildir, null bırakılabilir. Ayrıca const string dil = “C#”; tanımı derleme hatası vermeyen geçerli bir sabit (constant) atamasıdır.
Kullanıcıdan veri almak ve ekrana yazdırmak C# programlarının temelidir. Kullanıcıdan alınan metni tam sayıya çeviren komut dizisi int x = Convert.ToInt32(Console.ReadLine()); şeklindedir. Ekrana formatlı (biçimlendirilmiş) yazı yazdırmak için indeks numaraları kullanılır. Örneğin; x=5, y=3.14, z=-2023 değerlerini 3.14, 5, -2023 olarak yazdırmak için indeks sıralaması Console.WriteLine(“{1}, {0}, {2}”, x, y, z); olmalıdır. Console.Write() komutu metni yan yana yazarken, Console.WriteLine() komutu metni yazar ve alt satıra geçer. Örneğin, “İstanbul Üniversitesi” yazıp alta 2023, en alta AUZEF yazmak için Write ve WriteLine komutları doğru kombinasyonda kullanılmalıdır.
C# dilinde ön ek (++x) ve son ek (x++) artırma operatörleri farklı çalışır. Son ek operatöründe değişkenin mevcut değeri kullanılır, ardından değişken artırılır. Örneğin, a++ ve –a kombinasyonlarının kullanıldığı bir matematiksel işlemde a’nın anlık değişimleri hesaplanır (Çıktı: 1). Mantıksal işlemlerde kullanılan ? : (Ternary / Üçlü) operatörü tek satırda if-else görevi görür (Çıktı: 1). Soru işareti (?) ile kullanılan Null-Coalescing operatörü (??), değişken null ise sağdaki değeri atar (Çıktı: 5). Mantıksal ve bitsel operatörlerde (& ve |) işlem sırası ve kısa devre (short-circuit) yapmaması (her iki tarafı da değerlendirmesi) önemlidir (Çıktı: -1 : True).
Bitsel kaydırma operatörleri (Bitwise Shift) sayının ikilik tabandaki bitlerini sağa veya sola kaydırır. Örneğin, x >>= 2 işlemi, x’in bitlerini sağa kaydırır. x=4 iken bu işlem x’i 1 yapar. Bitsel NOT (~x) operatörü ise bitleri tersine çevirerek ikiye tümleyen sisteminde -2 değerini üretir (Çıktı: 1 : -2).
If-else blokları programın akışını kontrol eder. Mantıksal şartların adım adım değerlendirildiği bir yapıda, eğer ilk şartlar sağlanmazsa sonraki şartlara bakılır. Değişkenlerin güncellenmesi (örneğin ++y) şartların sonucunu değiştirir ve kod uygun bloğa girer (Çıktı: +). Mantıksal bir karşılaştırma olan x==y gibi işlemlerde, tipler ve değerler örtüşüyorsa sonuç true veya false olur (Çıktı: True : True). String formatlamada (örneğin {0} {2} {3} {1} diziliminde) argümanlar sırasıyla sembol, harf, yil ve bolumKodu gibi indekslerine göre yerleştirilir (Çıktı: #C 2023 BLGPRG).
Tüm C# ifadeleri (statement) noktalı virgül (;) ile bitirilmek zorundadır. Aksi takdirde derleyici (compiler) sözdizimi (syntax) hatası verir.


Öncelik sırası: ! ve ++ tekli operatörler, sonra ==, sonra &. !stat false olur. & kısa devre yapmadığından ++x yine çalışır, x = 0 olur ve 0 == 0 true döner. false & true = false olduğundan z + x - y = 3 + 0 − 2 = 1 sonucu yazdırılır.


b <= a yani -1 <= 1 doğrudur, bu yüzden üçlü operatör c ?? 5 ifadesini döndürür. ?? (null birleştirme) operatörü soldaki değer null ise sağdakini verir; c null olduğundan sonuç 5'tir.

(byte)a açık (explicit) tür dönüşümüdür; işaretli sbyte −128 değeri işaretsiz byte aralığına (0-255) sığmadığı için bitleri aynen yorumlanır ve 128 olur. Derleme hatası oluşmaz, ama orijinal değerle tutarsız bir sonuç elde edilir. Dönüşüm işaretliden işaretsize ve açık olduğundan B ve C şıkları yanlıştır.

Biçim dizesindeki {n} ifadeleri argüman listesindeki sırayı (0'dan başlayarak) gösterir: {0}=sembol #, {1}=bolumKodu BLGPRG, {2}=harf C, {3}=yil 2023. "{0} {2} {3} {1}" sırasıyla # , C, 2023, BLGPRG yazdırılır; bu da D şıkkındaki çıktıya karşılık gelir.
x=0, y=−1, z=1. İlk koşulda y + z != x → 0 != 0 false olduğundan && kısa devre yapar. İkinci koşulda y > x false; ++y ile y=0 olur ve 0 > 1 false. Üçüncü koşulda y == x (0 == 0) true ve x < z true; true & true true olduğundan ekrana + yazılır.
object tipindeki bir değişkene tanımlama sırasında değer atamak zorunlu değildir; object o; geçerli bir tanımdır. Buna karşılık var ile tanımlanan değişkene tanımlama anında değer atamak zorunludur ve tipi sonradan değişmez; dynamic tipin ise kontrolü çalışma zamanında yapılır ve tipi değişebilir.
C# 11 ile gelen ham dize (raw string literal) üç çift tırnakla (""") başlar ve biter; içinde tırnak ve ters bölü kaçış gerektirmeden yazılabilir. A şıkkında \W geçersiz kaçış dizisidir, B'de dize tek tırnakla yazılamaz, C sözdizimsel olarak hatalıdır, E'de ise @ dizesi içindeki tırnaklar "" şeklinde çiftlenmelidir.
