Caller Information (Çağıran Bilgisi)

Eyl 06, 2013

CallerInfo (Caller Information - Çağıran Bilgisi) öznitelikleri kullanılarak çağıran kaynak kodun dosya yolu, satır numarası ve çağıranın üye adı hakkında bilgi edinilebilir. Bu bilgilere ulaşmak için her biri varsayılan değere sahip, isteğe bağlı parametrelere uygulanan CallerInfo öznitelikleri kullanılır. "CallerInfo" öznitelikleri özellikle hata günlüklerinde kullanılabilir.

Aşağıdaki tabloda "System.Runtime.CompilerServices" alan adında tanımlanan "CallerInfo" öznitelikleri listelenmiştir:

 Öznitelik Açıklama   Tür
 CallerFilePathAttribute  Çağıranı içeren kaynak kodun tam yolu. Derleme zamanındaki dosya yoludur.  String
 CallerLineNumberAttribute  Çağıranın kaynak koddaki satır numarası.  Integer
 CallerMemberNameAttribute  Çağıranın yöntem veya özellik adı.  String

"CallerInfo" öznitelikleri isteğe bağlı olmayan parametrelere uygulanamaz. İsteğe bağlı parametreler için varsayılan bir değer atanması gerekmektedir.

Aşağıda örnek uygulamanın kaynak kodu bulunabilir. Örnek uygulamada "Hesapla"yöntemi parametre olarak iki tane tam sayı almakta ve kendisini çağıran üyeye göre"Toplama" veya "Cikarma" işlemi yapmakta ve sonucu ekrana yazdırmaktadır. Ayrıca çağıran yolunu ve çağırım yapılan satır numarasını da ekrana yazdırmaktadır."Hesapla" yönteminde varsayılan değere sahip, isteğe bağlı parametrelere CallerInfo özniteliklerini uygulamak için uygulanmak istenen isteğe bağlı parametrenin önüne köşeli parantez içinde uygulanmak istenen CallerInfo özniteliği yazılır ve varsayılan bir değer atanır. Böylece bu işlemin uygulandığı parametere uygulanan CallerInfo özniteliğinin özelliklerini taşır ve herhangi bir değer geçirilmemesi durumunda varsayılan değerler kullanılır.

Örnek Uygulama:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.CompilerServices;
using System.Diagnostics; 

namespace CallerInfoAttributes
{
    class Program
    {
        static void Main(string[] args)
        {
            int i = 10;
            int j = 5;
            Toplama(i, j);
            Cikarma(i, j);
            Console.ReadLine();  
         }

       private static void Cikarma(int deger1, int deger2)
       {
          Hesapla(deger1, deger2);
       }

       private static void Toplama(int deger1, int deger2)
       {
          Hesapla(deger1, deger2);
       }

      private static void Hesapla(int deger1, int deger2, [CallerLineNumber] int  satirNumarasi = 0, [CallerFilePath] string dosyaYolu = "",[CallerMemberName] string uyeAdi = "")
        {

            Console.WriteLine("Çağırım yapılan yerin satır numarası: {0}", satirNumarasi);
            Console.WriteLine("Çağıranın dosya yolu: {0}", dosyaYolu);
            Console.WriteLine("Çağıranın üye adı: {0}", uyeAdi);

            if (uyeAdi.Equals("Toplama"))
                Console.WriteLine("Toplam = {0}\n\n", deger1 + deger2);
            else
                Console.WriteLine("Fark = {0}\n\n", deger1 - deger2);
        }
    }
}

Örnek Uygulama Ekran Çıktısı: