Sealed, Static ve Partial Class Kullanımı in C#
C#’ta sealed, static ve partial class kavramlarını öğrenin. Amaçları, farkları ve kullanım senaryoları örneklerle anlatılıyor.
C# dilinde sınıflar farklı amaçlar için özel anahtar kelimelerle tanımlanabilir.
sealed sınıflar miras alınamaz, static sınıflar yalnızca ortak (utility) işlevler için kullanılır,
partial sınıflar ise aynı sınıfın tanımını birden fazla dosyaya bölmenize olanak tanır.
Bu yapılar, kodun güvenliğini artırmak, tekrar kullanımını kolaylaştırmak ve büyük projelerde iş bölümü sağlamak için önemlidir.
Sealed Class
sealed anahtar kelimesi ile işaretlenen sınıflar başka sınıflar tarafından miras alınamaz.
Bu, sınıfın davranışının değiştirilmesini istemediğimiz durumlarda kullanılır.
Örneğin güvenlik açısından kritik veya tamamlanmış mantığa sahip sınıflar sealed yapılabilir.
public sealed class PaymentProcessor
{
public void Process()
{
Console.WriteLine("Ödeme işlendi.");
}
}
// Aşağıdaki kod derleme hatası verir:
// public class CustomProcessor : PaymentProcessor { }
Static Class
static sınıflar yalnızca static üyeler içerir ve örneği (instance) oluşturulamaz.
Ortak yardımcı (utility) metotları toplamak için idealdir.
Örneğin matematiksel işlemler, tarih hesaplamaları veya formatlama gibi işlevler için kullanılır.
Math sınıfı bu türde bir örnektir. Bir uygulamada static tanımlanan bir sınıfın örneğinden sadece bir tane varmış gibi düşünülebilir.
public static class MathHelper
{
public static int Square(int x) => x * x;
public static int Cube(int x) => x * x * x;
}
class Program
{
static void Main()
{
Console.WriteLine(MathHelper.Square(5)); // 25
Console.WriteLine(MathHelper.Cube(3)); // 27
}
}
Partial Class
partial sınıflar, tek bir sınıfın tanımını birden fazla dosyaya bölmenizi sağlar.
Özellikle büyük projelerde veya otomatik üretilen kodlarla (ör. WinForms, WPF) çalışırken,
geliştiricilerin aynı sınıf üzerinde farklı bölümlerde çalışabilmesine imkan verir.
// File1.cs
public partial class Person
{
public string FirstName { get; set; } = string.Empty;
public string LastName { get; set; } = string.Empty;
}
// File2.cs
public partial class Person
{
public void Print()
{
Console.WriteLine($"{FirstName} {LastName}");
}
}
class Program
{
static void Main()
{
var p = new Person { FirstName = "Ali", LastName = "Veli" };
p.Print(); // Ali Veli
}
}
Ne Zaman Kullanılır?
- Sealed: Başka sınıfların miras almasını istemiyorsanız, davranışın değişmez kalmasını garanti etmek için.
- Static: Ortak ve nesne bağımsız yardımcı metotları toplamak için.
- Partial: Büyük sınıfları bölmek veya otomatik üretilen kod ile manuel kodu ayrı tutmak için.
TL;DR
sealed: Miras alınamaz sınıf.static: Örneği oluşturulamaz, sadece static üyeler içerir.partial: Tek bir sınıfı birden fazla dosyaya bölebilirsiniz.
Örnek Uygulama: Static ve Partial Class Kullanımı
Bu örnekte iki özel sınıf türü bir arada kullanılmıştır:
- Static class (Calculator) → Nesne oluşturulmadan ortak hesaplama metotları içerir.
- Partial class (Product) → Özellikler ve metotlar farklı dosyalara bölünmüştür.
Calculator.cs
// Static class: yalnızca static metotlar barındırır, new ile örneği oluşturulamaz
public static class Calculator
{
// İndirim uygular (% oranı kadar fiyat düşürülür)
public static decimal ApplyDiscount(decimal price, decimal rate)
=> price - (price * rate);
// Vergi ekler (% oranı kadar fiyat artırılır)
public static decimal AddTax(decimal price, decimal taxRate)
=> price + (price * taxRate);
}
Product.Part1.cs
// Partial class'ın ilk parçası: Özellikler burada tanımlı
public partial class Product
{
public string Name { get; set; } = string.Empty;
public decimal Price { get; set; }
}
Product.Part2.cs
// Partial class'ın ikinci parçası: Metotlar burada tanımlı
public partial class Product
{
// Ürünü ekrana yazdırır
public void Print()
{
Console.WriteLine($"{Name} - {Price:0.00} TL");
}
// Önce indirim, sonra vergi uygular
public void ApplyDiscountAndTax(decimal discountRate, decimal taxRate)
{
// Calculator (static class) kullanılıyor
Price = Calculator.ApplyDiscount(Price, discountRate);
Price = Calculator.AddTax(Price, taxRate);
}
}
Program.cs
class Program
{
static void Main()
{
// Yeni bir ürün nesnesi oluşturuluyor
var p = new Product { Name = "Laptop", Price = 20000m };
Console.WriteLine("İlk fiyat:");
p.Print(); // 20000 TL yazdırır
// Ürüne %10 indirim ve %20 KDV uygulanıyor
p.ApplyDiscountAndTax(0.10m, 0.20m);
Console.WriteLine("İndirim ve vergi sonrası fiyat:");
p.Print(); // İndirim ve vergi sonrası fiyat yazdırılır
}
}
Örnek Çalıştırma:
İlk fiyat:
Laptop - 20000,00 TL
İndirim ve vergi sonrası fiyat:
Laptop - 21600,00 TL