C# 实现简单的 AOP(面向切面编程)

简介: 通过反射与委托实现AOP,可在方法执行前后动态添加日志、计时等横切逻辑,提升代码复用性与可维护性。

通过反射和委托实现 AOP,在方法执行前后添加日志、计时等通用逻辑。

public class AopHelper
{
    // 包装方法,添加前置和后置逻辑
    public static void WrapMethod(Action action, Action before = null, Action after = null)
    {
        before?.Invoke();
        try
        {
            action.Invoke();
        }
        catch (Exception ex)
        {
            Console.WriteLine($"方法执行异常: {ex.Message}");
        }
        after?.Invoke();
    }
    // 带返回值的方法包装
    public static T WrapMethod<T>(Func<T> func, Action before = null, Action after = null)
    {
        before?.Invoke();
        T result = default;
        try
        {
            result = func.Invoke();
        }
        catch (Exception ex)
        {
            Console.WriteLine($"方法执行异常: {ex.Message}");
        }
        after?.Invoke();
        return result;
    }
}
// 调用示例
public static void TestAop()
{
    // 前置:计时开始  后置:计时结束
    var stopwatch = new Stopwatch();
    AopHelper.WrapMethod(() => {
        Thread.Sleep(1000);
        Console.WriteLine("业务方法执行中");
    }, () => stopwatch.Start(), () => {
        stopwatch.Stop();
        Console.WriteLine($"方法耗时: {stopwatch.ElapsedMilliseconds}ms");
    });
}
相关文章
|
2天前
|
安全 C#
C# 泛型:实现类型安全的通用代码
泛型通过类型参数(如T)实现类型通用性,可定义不指定具体类型的类或方法,使用时再确定类型。示例中,Swap&lt;T&gt;方法可交换任意同类型变量,List&lt;T&gt;集合避免装箱拆箱,提升性能与安全。
|
2天前
|
C#
C# 字符串操作:常用方法汇总(含案例)
C# 提供丰富的字符串操作方法,如拼接、截取、替换和判断等。本文通过工具类案例演示如何高效处理字符串,提升开发效率与代码可读性。
|
2天前
|
网络协议 安全 C#
C# 实现基于 TCP 的简单聊天程序(服务端)
基于TcpListener实现TCP聊天服务器,监听指定端口,接收客户端连接并实时转发消息。支持多客户端并发通信,新连接自动加入广播列表,断开后自动移除,确保线程安全与稳定运行。
|
2天前
|
C#
C# 日期时间操作:格式化与计算
DateTime类用于处理日期时间操作,支持格式化输出、加减计算及获取特定日期(如本月第一天)。示例代码展示了常用功能:格式化、计算日期差、增减天数等,便于高效处理时间数据。
|
2天前
|
存储 缓存 安全
C# 字典(Dictionary):键值对存储的高效用法
`Dictionary&lt;TKey, TValue&gt;` 是键唯一且支持快速查找(O(1))的键值对集合,适用于存储映射关系。可通过 `Add` 添加、`TryGetValue` 安全获取、`Remove` 删除元素,遍历使用 `foreach`,建议优先使用 `TryGetValue` 提升性能。
|
2天前
|
C#
C# 异步编程:async/await 简化异步操作
`async/await` 是 C# 5.0+ 的异步编程语法糖,简化异步操作(如网络请求、文件读写),避免回调地狱。通过 `async` 标记异步方法,`await` 等待任务完成而不阻塞主线程,提升程序响应性和性能,适用于 I/O 密集型场景。
|
2天前
|
C#
C# 随机数生成:Random 类用法
Random类用于生成伪随机数,适用于游戏、验证码、测试等场景。通过静态实例避免重复创建,确保随机性。提供整数、小数、布尔值及指定长度的随机字符串生成方法,使用简便且高效。注意需复用实例防止种子重复导致随机数相同。
|
2天前
|
C# 图形学 Windows
C# 制作 Windows Forms 图形验证码(带干扰线)
WinForms图形验证码利用Graphics绘制字符、干扰线与噪点,支持刷新及随机颜色、旋转,增强防破解能力,提升安全性。
|
2天前
|
安全 C#
C# 事件(Event):基于委托的观察者模式
事件是基于委托的封装机制,仅支持订阅与取消订阅,确保成员安全。常用于实现观察者模式,如订单状态变更时通知各系统,实现松耦合设计。
|
2天前
|
C# UED
C# 制作控制台版验证码认证(核心案例)
验证码用于防止恶意操作,控制台程序通过生成随机字符实现验证功能。用户输入验证码后系统比对,支持多次尝试并提示剩余机会,错误过多则认证失败,确保安全性与用户体验平衡。(236字符)

热门文章

最新文章