المقالاتدوت نت

Caller Info Attributes in C# 5.0

في بعض الاحيان عندما تكتب كود تحتاج لمعرفة معلومات عن ال Method التي منها تم استدعاء كودك !
قبل C# 5 كنا نستخدم الكلاس System.Diagnostics.StackFrame , علي سبيل المثال

using System;
using System.Diagnostics;
namespace CS_05
{
class Program
{
    static void Main(string[] args)
    {
        Print("Hello World");
        Console.ReadKey();
    }
    static void Print(string message)
    {
        var sf = new StackFrame(1, true); // Back up 1 level from the current method
        var methodName = sf.GetMethod().Name;
        var sourceFile = sf.GetFileName();
        var lineNumber = sf.GetFileLineNumber();
        Console.WriteLine("[{2} -- {0}] - {1} ({3}:{4})", methodName, message, DateTime.Now,
                          sourceFile, lineNumber);
    }
}
}

النائج سيكون ع هذا النحو :

[2 / 22 / 2013 11:11:15 PM-- Main]
- Hello World(f:\VisualStudioProjects\CS_05\CS_ 05\Program.cs: 9)

في الاصدار الجديد للغة C# تم توفير Attributes جديدة لل Methods ويمكن استخدامها كالتالي :

using System;
using System.Diagnostics;
using System.Runtime.CompilerServices;
namespace CS_05
{
class Program
{
    static void Main(string[] args)
    {
        Print("Hello World");
        Console.ReadKey();
    }
    private static void Print(string message, [CallerMemberName] string methodName = null,
                              [CallerFilePath] string sourceFile = null,
                              [CallerLineNumber] int lineNumber = 0)
    {
        Console.WriteLine("[{2} -- {0}] - {1} ({3}:{4})", methodName, message, DateTime.Now,
                          sourceFile, lineNumber);
    }
}
}

والناتج واحد :)

هذه الطرق كلها مفيدة في حالة اذا كنت تريد ان تعرف من اي Method يتم استدعاء Method اخري؛ وبالتالي ستسهل عليك اقتناص الاخطاء في برنامجك واصلاحها.