Tôi không chắc nhu cầu thực tế của bạn là gì, nhưng đây là tùy chọn cho thuê thấp. Đó là không chính xác "tự động", nhưng bạn có thể sử dụng StackTrace để bóc những thông tin bạn đang tìm kiếm trong một cách mà sẽ không đòi hỏi lập luận đi qua - tương tự như ckramer của đề nghị liên quan đến đánh chặn:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace TracingSample
{
class Program
{
static void Main(string[] args)
{
DoSomething();
}
static void DoSomething()
{
LogEnter();
Console.WriteLine("Executing DoSomething");
LogExit();
}
static void LogEnter()
{
StackTrace trace = new StackTrace();
if (trace.FrameCount > 1)
{
string ns = trace.GetFrame(1).GetMethod().DeclaringType.Namespace;
string typeName = trace.GetFrame(1).GetMethod().DeclaringType.Name;
Console.WriteLine("Entering {0}.{1}.{2}", ns, typeName, trace.GetFrame(1).GetMethod().Name);
}
}
static void LogExit()
{
StackTrace trace = new StackTrace();
if (trace.FrameCount > 1)
{
string ns = trace.GetFrame(1).GetMethod().DeclaringType.Namespace;
string typeName = trace.GetFrame(1).GetMethod().DeclaringType.Name;
Console.WriteLine("Exiting {0}.{1}.{2}", ns, typeName, trace.GetFrame(1).GetMethod().Name);
}
}
}
}
Bạn có thể kết hợp một cái gì đó giống như ví dụ ở trên với thừa kế, sử dụng một thành viên nào không ảo trong các loại hình cơ sở để biểu thị phương pháp hành động, sau đó gọi một thành viên ảo để thực sự làm việc:
public abstract class BaseType
{
public void SomeFunction()
{
LogEnter();
DoSomeFunction();
LogExit();
}
public abstract void DoSomeFunction();
}
public class SubType : BaseType
{
public override void DoSomeFunction()
{
// Implementation of SomeFunction logic here...
}
}
một lần nữa - không có nhiều "tự động "về điều này, nhưng nó sẽ hoạt động trên cơ sở hạn chế nếu bạn không yêu cầu thiết bị đo đạc trên mọi phương thức đơn lẻ ation.
Hy vọng điều này sẽ hữu ích.
Mã này sẽ phù hợp với mã này để nắm bắt các giá trị tham số http://stackoverflow.com/a/6928253/1267778. Vì vậy, tôi có một cái gì đó như logService.LogEnter (arg1, arg2, arg3). Công cụ tuyệt vời – parliament