Skip to content

Temel Veri Tipleri

Genel Bakış

Bu bölümde, C#'ta kullanılan temel veri tiplerini, bunların özelliklerini ve kullanım alanlarını inceleyeceğiz.

Mülakat Soruları ve Cevapları

1. Value Types ve Reference Types arasındaki temel farklar nelerdir?

Cevap: Value Types: - Stack'te saklanır - Değer kopyalama yapar - Struct, enum ve primitive tipler - Null olamaz (nullable olmadıkça) - Daha hızlı erişim

Reference Types: - Heap'te saklanır - Referans kopyalama yapar - Class, interface, delegate, array - Null olabilir - Daha yavaş erişim

Örnek Kod:

// Value Type örneği
int a = 10;
int b = a; // Değer kopyalama
b = 20;    // a değişmez

// Reference Type örneği
class Person { public string Name; }
Person p1 = new Person { Name = "Ahmet" };
Person p2 = p1;      // Referans kopyalama
p2.Name = "Mehmet";  // p1.Name de değişir

2. Primitive veri tipleri nelerdir ve ne zaman kullanılır?

Cevap: Primitive Tipler: - Tam Sayılar: - byte (0-255) - short (-32,768 to 32,767) - int (-2,147,483,648 to 2,147,483,647) - long (çok büyük sayılar)

  • Ondalıklı Sayılar:
  • float (7 basamak hassasiyet)
  • double (15-16 basamak hassasiyet)
  • decimal (28-29 basamak hassasiyet)

  • Diğer:

  • char (tek karakter)
  • bool (true/false)

Örnek Kod:

// Tam sayı örnekleri
byte age = 25;
int population = 85000000;
long distance = 15000000000L;

// Ondalıklı sayı örnekleri
float pi = 3.14f;
double gravity = 9.81;
decimal price = 99.99m;

// Diğer tipler
char grade = 'A';
bool isActive = true;

3. Nullable tipler nedir ve nasıl kullanılır?

Cevap: Nullable Tipler: - Value type'lara null değer atama imkanı - ? operatörü ile tanımlanır - HasValue ve Value özellikleri - Null-coalescing operatörü (??)

Örnek Kod:

// Nullable tanımlama
int? nullableInt = null;
DateTime? nullableDate = null;

// Null kontrolü
if (nullableInt.HasValue)
{
    int value = nullableInt.Value;
}

// Null-coalescing operatörü
int result = nullableInt ?? 0;

// Null-conditional operatörü
string name = person?.Name ?? "Bilinmiyor";

4. Tip dönüşümleri (Type Conversion) nasıl yapılır?

Cevap: Tip Dönüşümleri: - Implicit Conversion: - Otomatik dönüşüm - Veri kaybı yok - Küçük tip -> Büyük tip

  • Explicit Conversion:
  • Manuel dönüşüm
  • Veri kaybı olabilir
  • Cast operatörü kullanımı

  • Convert Sınıfı:

  • Güvenli dönüşüm
  • Exception handling
  • TryParse metodu

Örnek Kod:

// Implicit conversion
int i = 10;
long l = i;  // Otomatik dönüşüm

// Explicit conversion
double d = 10.5;
int i = (int)d;  // Manuel dönüşüm

// Convert sınıfı
string str = "123";
int number = Convert.ToInt32(str);

// TryParse
string input = "123";
if (int.TryParse(input, out int result))
{
    // Başarılı dönüşüm
}

5. Boxing ve Unboxing nedir ve performans etkileri nelerdir?

Cevap: Boxing/Unboxing: - Boxing: Value type -> Reference type - Unboxing: Reference type -> Value type - Performans maliyeti yüksek - Mümkünse kaçınılmalı

Örnek Kod:

// Boxing örneği
int i = 123;
object o = i;  // Boxing

// Unboxing örneği
int j = (int)o;  // Unboxing

// Performans etkisi
var stopwatch = new Stopwatch();
stopwatch.Start();

// Boxing/Unboxing içeren kod
for (int k = 0; k < 1000000; k++)
{
    object boxed = k;  // Boxing
    int unboxed = (int)boxed;  // Unboxing
}

stopwatch.Stop();
Console.WriteLine($"Boxing/Unboxing süresi: {stopwatch.ElapsedMilliseconds}ms");

Best Practices

  1. Veri Tipi Seçimi
  2. Uygun boyutta tip seçin
  3. Gereksiz büyük tiplerden kaçının
  4. Nullable kullanımını sınırlayın

  5. Tip Dönüşümleri

  6. Implicit conversion tercih edin
  7. TryParse kullanın
  8. Boxing/Unboxing'den kaçının

  9. Performans

  10. Struct kullanımını değerlendirin
  11. Referans tiplerini dikkatli kullanın
  12. Memory allocation'ı minimize edin

Kaynaklar