2013-04-19 22 views
24

Tôi đang cố gắng tìm cách để đăng nhập tên phương thức theo cách hiệu quả.r.t. tốc độ và khả năng bảo trì. Tôi đoán, trong .Net 4.5 Caller Information attributes chỉ được hiển thị cho mục đích này ngoại trừ phần tốc độ. Tôi cảm thấy đây chỉ là các đường cú pháp khi sử dụng System.Reflection.MethodBase.GetCurrentMethod() hoặc stackTrace.GetFrame (1) .GetMethod(). Tên (Got from here). (hoặc) Các phương pháp này có mang lại lợi ích hiệu suất không?Hiệu suất đạt được bằng cách sử dụng thuộc tính Thông tin người gọi

Trong C#, Có cách nào để lấy tên phương thức tại thời gian biên dịch (như trong c++) không?

+4

Bạn đã thực sự cấu hình hiệu suất của chúng, hoặc là bạn chỉ cần trước empting một vấn đề mà có thể không là một vấn đề? –

+0

@DanielKelley Tôi chưa đo hiệu suất. Tôi muốn biết điều gì đang xảy ra dưới sự che chở của các thuộc tính Thông tin người gọi. Daniel đã đề cập rằng sự thay thế xảy ra vào thời gian biên dịch chính xác là tôi đang tìm kiếm. – Imran

Trả lời

51

Thuộc tính thông tin người gọi khiến trình biên dịch C# cung cấp tên người gọi tại cuộc gọi. Điều này xảy ra tại thời gian biên dịch, không có sự phản ánh nào liên quan.

public void DoProcessing() 
{ 
    LogCall(); 
} 

public void LogCall([CallerMemberName] string memberName = "") 
{ 
    Console.WriteLine(memberName + " was called."); 
} 

sẽ được biên dịch để:

public void DoProcessing() 
{ 
    LogCall("DoProcessing"); 
} 

public void LogCall(string memberName) 
{ 
    Console.WriteLine(memberName + " was called."); 
} 
+0

Đây chính xác là những gì tôi đang tìm kiếm. Cảm ơn cho phản ứng nhanh chóng của bạn. Bạn có ý tưởng nào để đạt được sự thay thế thời gian biên dịch trong các phiên bản .NET cũ hơn không? – Imran

+1

[CallerMemberInfo] sẽ hoạt động với bất kỳ phiên bản .NET nào miễn là bạn sử dụng trình biên dịch C# 5. Xem http://stackoverflow.com/questions/13381917/is-the-callermembername-attribute-in-4-5-able-to-be-faked – Daniel

+0

Cảm ơn bạn đã liên kết. Tôi hiện không sử dụng trình biên dịch C# 5 yêu cầu VS2012. – Imran

Các vấn đề liên quan