في بعض الاحيان عندما تكتب كود تحتاج لمعرفة معلومات عن ال 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 اخري؛ وبالتالي ستسهل عليك اقتناص الاخطاء في برنامجك واصلاحها.