Skip to content

Temel .NET Kavramları

Genel Bakış

Bu bölüm, .NET geliştiricilerinin bilmesi gereken temel kavramları kapsar. CLR, managed/unmanaged code, assembly ve namespace gibi temel yapıları öğreneceksiniz.

İçindekiler

  1. .NET Framework vs .NET Core
  2. CLR (Common Language Runtime)
  3. Managed ve Unmanaged Code
  4. Assembly ve Namespace
  5. Garbage Collection

Mülakat Soruları ve Cevapları

1. .NET Framework ve .NET Core arasındaki temel farklar nelerdir?

Cevap: - .NET Framework Windows'a özgüdür, .NET Core çapraz platformdur - .NET Core daha modüler ve hafiftir - .NET Core daha hızlı performans sunar - .NET Core container desteği vardır - .NET Core açık kaynak kodludur

Örnek Kod:

// .NET Framework'te Windows Forms uygulaması
public class WindowsFormApp : Form
{
    public WindowsFormApp()
    {
        this.Text = "Windows Forms App";
    }
}

// .NET Core'da Console uygulaması
public class Program
{
    public static void Main(string[] args)
    {
        Console.WriteLine("Cross-platform .NET Core App");
    }
}

2. CLR nedir ve nasıl çalışır?

Cevap: CLR (Common Language Runtime), .NET uygulamalarının çalışma zamanı ortamıdır. Temel görevleri: - Memory management - Type safety - Exception handling - Security - Thread management

Örnek Kod:

// CLR tarafından yönetilen memory allocation
public class MemoryExample
{
    public void AllocateMemory()
    {
        // CLR heap'te yer ayırır
        var list = new List<int>();

        // CLR garbage collection yapar
        list = null;
    }
}

3. Managed ve Unmanaged Code arasındaki farklar nelerdir?

Cevap: Managed Code: - CLR tarafından yönetilir - Otomatik memory management - Type safety - Exception handling

Unmanaged Code: - İşletim sistemi tarafından yönetilir - Manuel memory management - Daha hızlı performans - Daha fazla kontrol

Örnek Kod:

// Managed Code
public class ManagedExample
{
    public void ManagedMethod()
    {
        var managedResource = new Resource();
        // CLR otomatik olarak memory'yi yönetir
    }
}

// Unmanaged Code
public class UnmanagedExample
{
    [DllImport("user32.dll")]
    public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);

    public void UnmanagedMethod()
    {
        // Windows API çağrısı - unmanaged code
        MessageBox(IntPtr.Zero, "Hello", "Message", 0);
    }
}

4. Assembly ve Namespace kavramlarını açıklayınız.

Cevap: Assembly: - .NET'te dağıtım birimi - DLL veya EXE dosyası - Metadata içerir - Version bilgisi taşır

Namespace: - Kod organizasyonu sağlar - İsim çakışmalarını önler - Hiyerarşik yapı sunar - Kod okunabilirliğini artırır

Örnek Kod:

// Assembly: MyApp.dll
namespace MyApp.Data
{
    public class Database
    {
        // Database işlemleri
    }
}

namespace MyApp.Services
{
    public class UserService
    {
        // Servis işlemleri
    }
}

5. Garbage Collection nasıl çalışır?

Cevap: Garbage Collection: - Otomatik memory yönetimi - Heap'teki kullanılmayan nesneleri temizler - Generations (0, 1, 2) kullanır - Finalization queue yönetir

Örnek Kod:

public class GarbageCollectionExample
{
    public void CreateAndCollect()
    {
        // Generation 0'da nesne oluşturulur
        var obj = new LargeObject();

        // Nesne kullanılmaz hale gelir
        obj = null;

        // Garbage Collection tetiklenir
        GC.Collect();

        // Finalization queue kontrolü
        GC.WaitForPendingFinalizers();
    }
}

Best Practices

  1. Memory Yönetimi
  2. IDisposable pattern kullanımı
  3. using statement kullanımı
  4. Large object heap yönetimi
  5. Finalization'dan kaçınma

  6. Performans

  7. Boxing/unboxing'den kaçınma
  8. String concatenation yerine StringBuilder
  9. Collection initializers kullanımı
  10. Async/await pattern kullanımı

  11. Güvenlik

  12. Code access security
  13. Role-based security
  14. Cryptography kullanımı
  15. Secure string handling

Kaynaklar