caller information attribute

caller information attribute

یکی از امکانات خوبی که از سی شارپ 10 به بعد اضافه شد caller information attribute ها هستند. وقتی برای برنامه لاگ مینویسید اغلب می خواهید نام فایل کد منبع، نام متد  و شماره خطی که رویداد درآن اتفاق افتاده رو هم در کنار خطا ثبت کنید این کنار با caller information attribute براحتی قابل انجام هست. این اتریبیوتها به ویژه برای ردیابی، اشکال زدایی و ایجاد ابزارهای تشخیصی مفید هستند. برای استفاده از آنها، باید آنها را روی پارامترهای اختیاری اعمال کنید.

با استفاده از ویژگی های Caller Info، می توانیم اطلاعات زیر را دریافت کنیم.

  • محل فایل منبع
  • شماره خطی که در آن متد فراخوانی می شود
  • نام روش تماس گیرنده

 

این اطلاعات برای ردیابی و اشکال زدایی کد منبع مفید است.

برای پیاده سازی این ویژگی، باید از فضای نام System.Runtime.CompilerService در برنامه خود استفاده کنیم. این فضای نام حاوی ویژگی های اطلاعات تماس گیرنده زیر است.

CallerFilePathAttribute

برای دریافت مسیر کامل فایل منبع استفاده می شود.

CallerLineNumberAttribute

برای دریافت شماره خط در فایل منبعی که متد در آن فراخوانی می شود، استفاده می شود.

CallerMemberNameAttribute

برای دریافت نام متدی که رخداد در آن اتفاق افتاده استفاده می شود.

 

متدی که می خواهیم فراخوانی کنیم باید از پارامترهای اختیاری استفاده کند. این پارامترهای اختیاری روی مقدار پیش فرض تنظیم می شوند. کامپایلر سی شارپ اطلاعات را در طول اجرای متد روی این پارامترها تنظیم می کند.

 

  1. using System;  
  2. using System.Runtime.CompilerServices;  
  3. namespace CSharpFeatures  
  4. {  
  5.     class CallerInfoExample  
  6.     {   
  7.         static void Main(string[] args)  
  8.         {  
  9.             // Calling method  
  10.             show();  
  11.         }  
  12.         // We must specify optional parameters to get caller info.  
  13.         static void show([CallerMemberName] string callerName = null,  
  14.             [CallerFilePath] string callerFilePath = null,   
  15.             [CallerLineNumber] int callerLine = -1)  
  16.         {  
  17.             Console.WriteLine("Caller method Name: {0}", callerName);  
  18.             Console.WriteLine("Caller method File location: {0}", callerFilePath);  
  19.             Console.WriteLine("Caller method Line number: {0}", callerLine);  
  20.         }  
  21.     }  
  22. }  

 

 

خروجی

Caller method Name: Main

Caller method File location: f:\C#\C# Features\CSharpFeatures\CallerInfoExample.cs

Caller method Line number: 10

 

 
 

 

 

مرتضی جنگجو

برنامه نویس fullstack با بیش از 14 سال سابقه کار و همکاری در توسعه و پیاده سازی نرم افزارهای تحت وب با تکنولوژی Net. در شرکتهای بزرگ ایرانی، هلندی، فنلاندی و ترکیه

شبکه های اجتماعی نویسنده

دیدگاه کاربران