crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
C# Attributes (Öznitelikler): Kodunuza Meta Veri Ekleyin
Attribute, sınıflar, metotlar, özellikler veya değişkenler hakkında ek bilgi sağlayan bir yapıdır. Kodun işleyişine doğrudan karışmazlar; ancak derleyiciye veya diğer araçlara (serileştirme, veritabanı eşleme gibi) rehberlik ederler.
1. Hazır (Built-in) Öznitelikler
.NET içerisinde sıkça kullandığımız bazı hazır öznitelikler vardır:
[][Obsolete]: Bir metodun artık kullanılmaması gerektiğini belirtir. Derleyici bu metot kullanıldığında uyarı verir.
[][Serializable]: Bir sınıfın verilerinin bir dosyaya veya ağa aktarılabileceğini işaretler.- [Required]: (ASP.NET gibi yapılarda) Bir alanın boş geçilemeyeceğini belirtir.
C#:
public class Sistem
{
[Obsolete("Bu metot eski sürümde kaldı, lütfen 'YeniGiris' metodunu kullanın.")]
public void EskiGiris()
{
// Eski kodlar...
}
}
2. Custom Attributes: Kendi Özniteliğinizi Oluşturmak
Kendi özniteliklerinizi oluşturmak için System.Attribute sınıfından miras alan bir sınıf yazmanız yeterlidir.
C#:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class BilgiAttribute : Attribute
{
public string Yazar { get; }
public string Versiyon { get; }
public BilgiAttribute(string yazar, string versiyon)
{
Yazar = yazar;
Versiyon = versiyon;
}
}
// Kullanımı:
[Bilgi("Gökhan", "1.0")]
public class OdemeServisi { }
3. Öznitelikleri Okumak: Reflection (Yansıma)
Bir koda eklediğiniz özniteliği okumak için Reflection kullanırız. Bu, uygulamanın kendi kod yapısını incelemesi anlamına gelir.
C#:
var tip = typeof(OdemeServisi);
var nitelikler = tip.GetCustomAttributes(typeof(BilgiAttribute), false);
foreach (BilgiAttribute nitelik in nitelikler)
{
Console.WriteLine($"Bu sınıf {nitelik.Yazar} tarafından yazıldı. Versiyon: {nitelik.Versiyon}");
}
4. Kullanım Alanları: Neden İhtiyaç Duyarız?
Öznitelikler modern C# kütüphanelerinin temelidir:
| Kullanım Alanı | Örnek |
|---|---|
| Veritabanı (EF Core) | [Key], [Table("Uyeler")] ile tablo eşleşmelerini sağlar. |
| Web API | [HttpGet], [Authorize] ile erişim izinlerini belirler. |
| Test Frameworkleri | [Test], [Fact] ile hangi metotların test olduğunu işaretler. |
Sonuç
Öznitelikler, kodunuzu daha deklaratif (ne yapılacağını söyleyen) hale getirir. "Eğer bu metot [Logla] etiketi taşıyorsa, çalışmadan önce günlük tut" gibi esnek mantıklar kurmanıza olanak tanır. Kodunuzun okunabilirliğini artırırken, diğer kütüphanelerle olan iletişimini de standartlaştırır.