Önceden tanımlı attribute'lar
[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
-
Obsolete attribute'unu tamamla
[____] void Old() { }Cevabı göster
[Obsolete] void Old() { } -
[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.
-
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