C#
Özel attribute
AttributeUsage ile kendi attribute sınıfını yazmayı öğrenirsin.
Özel attribute yazma
Özel bir attribute yazmak için Attribute sınıfından türeten bir sınıf tanımlarsın. Kullanım kolaylığı için adı ...Attribute ile bitmelidir. Örnek: public class NoteAttribute : Attribute { }.
Özellik ve oluşturucu ekleyerek attribute'e veri taşıyabilirsin. [AttributeUsage] ile nereye uygulanabileceği (sınıf, metot, özellik) ve çoklu kullanıma izin verilip verilmeyeceğini belirlersin.
AttributeUsage
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)] bir attribute'ün nereye uygulanabileceğini ve çoklu kullanıma izin verilip verilmeyeceğini belirler. AttributeTargets numaralandırması hedef türlerini listeler.
Yaygın hedefler: Class, Method, Property, Field, Assembly. AllowMultiple = true aynı öğeye birden çok kez uygulanabilmesini sağlar. Inherited = true türetilmiş sınıflara geçmesini sağlar.
Uygulama NoteAttribute tanımla ve uygula
Aşağıdaki iskelette NoteAttribute sınıfını tanımla: [AttributeUsage(AttributeTargets.Class)] ile işaretle, Attribute'ten türet, Text özelliği ve string text parametreli oluşturucu ekle. Sample sınıfına [Note("Önemli")] uygula. Main içinde typeof(Sample).GetCustomAttributes(true) ile attribute'ları al ve her birinin tür adını Console.WriteLine ile yazdır.
Örnek çözümü göster
[AttributeUsage(AttributeTargets.Class)] public class NoteAttribute : Attribute { public string Text { get; set; } public NoteAttribute(string text) { Text = text; } }. Sample sınıfına [Note("Önemli")] ekle. Main içinde typeof(Sample).GetCustomAttributes(true) ile al ve foreach (var a in attrs) { Console.WriteLine(a.GetType().Name); } ile yazdır.
Örnek çözüm:
using System;
[AttributeUsage(AttributeTargets.Class)]
public class NoteAttribute : Attribute
{
public string Text { get; set; }
public NoteAttribute(string text) { Text = text; }
}
[Note("Önemli")]
class Sample { }
class Program
{
static void Main()
{
var attrs = typeof(Sample).GetCustomAttributes(true);
foreach (var a in attrs)
{
Console.WriteLine(a.GetType().Name);
}
}
}
Kendini test et
-
Attribute sınıfı bildirimini tamamla
public class MyAttribute : ____ { }
Cevabı göster
public class MyAttribute : Attribute { }
-
Özel attribute hangi sınıftan türetilir?
- MemberInfo
- Attribute
- Type
- Object
Cevabı göster
Attribute — Doğru. Özel attribute Attribute sınıfından türetilir.
-
Öğeyi anlamına eşle
- AttributeUsage
- Hedef belirler
- AttributeTargets
- Hedef türleri
- AllowMultiple
- Çoklu kullanım
- Inherited
- Türetilen sınıflara geçer
Sıradaki ders: Attribute okuma