CodeBlanks Logo Icon CodeBlanks

Özel attribute

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

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

  1. Attribute sınıfı bildirimini tamamla

    public class MyAttribute : ____ { }
    Cevabı göster
    public class MyAttribute : Attribute { }
  2. Ö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.

  3. Öğeyi anlamına eşle

    AttributeUsage
    Hedef belirler
    AttributeTargets
    Hedef türleri
    AllowMultiple
    Çoklu kullanım
    Inherited
    Türetilen sınıflara geçer

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