2016-07-19 2 views
1

У меня есть простой примерметод с атрибутом в качестве входного параметра

class Program 
{ 
    static void DoProcessing() 
    { 
     TraceMessage("Hello from DoProcessing."); 
    } 

    static void TraceMessage(string message, 

      [CallerMemberName] string memberName = "", 
      [CallerFilePath] string sourceFilePath = "", 
      [CallerLineNumber] int sourceLineNumber = 0) 
    { 
     Console.WriteLine("message: " + message); 
     Console.WriteLine("member name: " + memberName); 
     Console.WriteLine("source file path: " + sourceFilePath); 
     Console.WriteLine("source line number: " + sourceLineNumber); 
     Console.WriteLine(new string('-',25)); 
    } 

    static void Main() 
    { 

     TraceMessage("Hello from Main!"); 

     Console.WriteLine(new string('-',40)); 
     DoProcessing(); 
     Console.ReadKey(); 
    } 
} 

Может кто-то объяснить, что цель использования [CallerMemberName], [CallerFilePath], [CallerLineNumber] атрибуты в качестве входных параметров? И когда мы должны отмечать наши входные параметры атрибутами?

+0

Вы пробовали использовать эти атрибуты? – PoweredByOrange

+0

@PoweredByOrange да, очевидно, что означают эти атрибуты, но когда мы должны отмечать наши входные параметры атрибутами? –

+1

Для получения дополнительной информации прочитайте: https://msdn.microsoft.com/en-us/library/mt653988.aspx –

ответ

0

CallerMemberName Позволяет получить метод или имя свойства вызывающего метода.

CallerFilePath Позволяет получить полный путь к исходному файлу, содержащему вызывающего. Это путь к файлу во время компиляции.

CallerLineNumber Позволяет получить номер строки в исходном файле, по которому вызывается метод.

Эти атрибуты принадлежат System.Runtime.CompilerServices Пространство имен, которое предоставляет функциональные возможности для авторов компилятора, которые используют управляемый код для указания атрибутов в метаданных, которые влияют на поведение во время выполнения среды выполнения общего языка.

В вашем случае, если ваш выход будет

message: Hello from Main! 
member name: Main 
source file path: c:\Users\Saket\Documents\Visual Studio 2012\Projects\ConsoleAp 
plication3\ConsoleApplication3\Program.cs 
source line number: 35 

Здесь печать имени вызывающего абонента, который main() и путь к файлу и номер строки, который 35 (TraceMessage("Hello from Main!");). Надеюсь, это понятно.

Ссылка system.runtime.compilerservices

+0

@ sergiy-lichenko Пожалуйста, отметьте ответ на вопрос, чтобы он не казался без ответа. –

Смежные вопросы