CodeBlanks Logo Icon CodeBlanks

Named ve positional parametreler

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

Attribute'lerde named ve positional parametreleri öğrenirsin.

Positional ve named parametreler

Attribute kullanımında iki tür parametre vardır. Positional parametreler oluşturucuya sırayla geçer ve zorunludur. Named parametreler ise yazılabilir özelliklere atanır ve isteğe bağlıdır. Sözdizimi: [Attr("pos", Named = 5)].

Positional parametreler attribute oluşturucusunun parametre listesine karşılık gelir. Named parametreler Ad = değer biçiminde yazılır ve oluşturucu çağrısından sonra, virgülle ayrılır. Named'ler sınıfın public set edilebilir özelliklerine atanır.

Positional parametreler

Positional parametreler attribute oluşturucusunun argümanlarıdır. Zorunludur ve sırası önemlidir. Named parametrelerden önce yazılır. Örnek: public InfoAttribute(string name) oluşturucusu için [Info("Veri")] kullanımı positional'dır.

Birden çok positional parametre virgülle ayrılır. Hem positional hem named kullanırsan, önce tüm positional'lar, sonra named'ler yazılır: [Info("Veri", Priority = 3)]. Sıra named'ler için önemli değildir.

Uygulama Positional ve named birlikte kullan

Aşağıdaki Sample sınıfına [Info("Veri", Priority = 3)] uygula. Main içinde Attribute.GetCustomAttribute(typeof(Sample), typeof(InfoAttribute)) as InfoAttribute ile oku ve Console.WriteLine(attr.Priority) ile Priority değerini yazdır.

Örnek çözümü göster
var attr = Attribute.GetCustomAttribute(typeof(Sample), typeof(InfoAttribute)) as InfoAttribute; Console.WriteLine(attr.Priority);
Örnek çözüm:
using System;

[AttributeUsage(AttributeTargets.Class)]
public class InfoAttribute : Attribute
{
    public string Name { get; set; }
    public int Priority { get; set; }
    public InfoAttribute(string name) { Name = name; }
}

[Info("Veri", Priority = 3)]
class Sample { }

class Program
{
    static void Main()
    {
        var attr = Attribute.GetCustomAttribute(typeof(Sample), typeof(InfoAttribute)) as InfoAttribute;
        Console.WriteLine(attr.Priority);
    }
}

Kendini test et

  1. Named parametre nereye gider?

    • Yazılabilir özelliğe
    • Oluşturucuya
    • Statik alana
    • Yalnızca okunur özelliğe
    Cevabı göster

    Yazılabilir özelliğe — Doğru. Named parametre yazılabilir bir özelliğe atanır.

  2. Named parametreyi tamamla

    [My("test", ____ = 5)]
    Cevabı göster
    [My("test", Count = 5)]
  3. Parametre türünü hedefine eşle

    Positional
    Oluşturucu parametresi
    Named
    Özellik ataması
    Optional
    Adlandırılmış ve isteğe bağlı
    Mandatory
    Positional zorunlu

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