CodeBlanks Logo Icon CodeBlanks

Önceden tanımlı attribute'lar

C# kursu · İleri seviye · Ders 53/83

[Obsolete], [Conditional] ve [Serializable] gibi attribute'ları öğrenirsin.

Yerleşik attribute'lar

C# sık kullanılan birkaç yerleşik attribute sunar. [Obsolete] bir öğeyi eski işaretler ve derleyici uyarı veya hata üretir. [Conditional("DEBUG")] bir metoda yapılan çağrının yalnızca ilgili sembol tanımlıysa derlenmesini sağlar.

[Serializable] bir tipin serileştirilebildiğini bildirir; eski serileştirme API'leri tarafından okunur. Bunlar özel kod yazmadan derleyici ve çalışma zamanı davranışlarını yönlendiren yaygın attribute'lardır.

[Conditional] detayları

[Conditional("DEBUG")] bir metot işaretler; bu metoda yapılan çağrılar yalnızca DEBUG sembolü tanımlıysa derlenir. Metodun kendisi her zaman derlenir; yalnızca çağrı noktaları etkilenir. Bu, günlükleme ve tanılama kodlarında yaygındır.

Conditional attribute yalnızca void döndüren metotlara uygulanabilir. Birden çok sembol de verilebilir: [Conditional("DEBUG"), Conditional("TRACE")]. Koşul derleme zamanında değerlendirilir; çalışma zamanı maliyeti yoktur.

Uygulama Obsolete uygula ve Message yazdır

Aşağıdaki Tool sınıfındaki OldMethod'a [Obsolete("Use NewMethod")] uygula. Main içinde Attribute.GetCustomAttribute(typeof(Tool).GetMethod("OldMethod"), typeof(ObsoleteAttribute)) as ObsoleteAttribute ile oku ve Console.WriteLine(attr.Message) ile mesajı yazdır.

Örnek çözümü göster
var attr = Attribute.GetCustomAttribute(typeof(Tool).GetMethod("OldMethod"), typeof(ObsoleteAttribute)) as ObsoleteAttribute; Console.WriteLine(attr.Message);
Örnek çözüm:
using System;

class Tool
{
    [Obsolete("Use NewMethod")]
    public static void OldMethod() { }
}

class Program
{
    static void Main()
    {
        var attr = Attribute.GetCustomAttribute(typeof(Tool).GetMethod("OldMethod"), typeof(ObsoleteAttribute)) as ObsoleteAttribute;
        Console.WriteLine(attr.Message);
    }
}

Kendini test et

  1. Obsolete attribute'unu tamamla

    [____]
    void Old() { }
    Cevabı göster
    [Obsolete]
    void Old() { }
  2. [Conditional("DEBUG")] ne yapar?

    • Metodu her zaman siler
    • Metodu yalnızca DEBUG'da derler
    • Metoda yapılan çağrıyı DEBUG tanımlıysa tutar, değilse kaldırır
    • Metodu async yapar
    Cevabı göster

    Metoda yapılan çağrıyı DEBUG tanımlıysa tutar, değilse kaldırır — Doğru. Conditional, çağrıyı sembole göre tutar veya kaldırır; metodun kendisi her zaman derlenir.

  3. Attribute'ı amacına eşle

    [Obsolete]
    Eski işaretler
    [Conditional]
    Çağrıyı koşullu tutar
    [Serializable]
    Serileştirilebilir işaretler
    [AttributeUsage]
    Hedef kısıtı verir

İleri seviye bölümündeki tüm dersler