将.NET高级开发与C语言结合,通常意味着你需要在C语言项目中集成.NET组件或使用.NET平台进行开发。以下是一些步骤和概念,可以帮助你实现这一目标:### 1. 了解.NET和C语言- **.NET**:是一个由微软开发的跨平台框架,用于构建应用程序。
摘要:目录动态代码EMITAOP 实现原理实现 AOP 的前提EMIT 实现 AOP表达式树表达式树生成变量常量和赋值逻辑运算调用方法编写对象映射框架表达式树解析Roslyn使用 Roslyn使用 NatashaSource Generators
目录动态代码EMITAOP 实现原理实现 AOP 的前提EMIT 实现 AOP表达式树表达式树生成变量常量和赋值逻辑运算调用方法编写对象映射框架表达式树解析Roslyn使用 Roslyn使用 NatashaSource Generators
动态代码
C# 中实现动态代码的方式有很多,比如 反射、表达式树、EMIT、Roslyn、Source Generators 等,C# 各类框架中几乎都有动态代码技术的使用,比如依赖注入、对象关系映射、AOP 技术等。由于动态代码技术在 C# 中的使用场景非常广泛,因此在本章中,笔者将会介绍多种动态代码技术,以及完成部分实践,完成常见几种框架技术的编写方法。
阅读本章内容之前,需要读者熟练掌握反射技术,需要学习反射技术,可以参考笔者的在线电子书课程: https://reflect.whuanle.cn/
EMIT
EMIT 是一种使用 C# 编排生成 IL 代码的技术,IL 是 .NET 平台的中间语言,由于 IL 的高性能的特点,很多框架都使用 EMIT 技术动态生成代码,最广泛的使用是编写 AOP 框架。在本节中,笔者将会介绍 AOP 的实现原理,以及使用 EMIT 编写一个简单的 AOP 程序。
创建控制台项目,引入 CZGL.AOP 包,示例代码请参考 Demo.CZGLAOP 项目。
有以下接口和类型:
public interface ITest
{
void MyMethod();
}
public class Test : ITest
{
public virtual string A { get; set; }
public Test()
{
Console.WriteLine("构造函数没问题");
}
public virtual void MyMethod()
{
Console.WriteLine("运行中");
}
}
我们希望,在执行 MyMethod 方法时,能够在执行前后打印出日志,这时可以先编写一个特性类,继承 ActionAttribute ,实现 Before 和 After 接口。
public class LogAttribute : ActionAttribute
{
public override void Before(AspectContext context)
{
Console.WriteLine("--执行前--");
}
public override object After(AspectContext context)
{
Console.WriteLine("--执行后--");
if (context.IsMethod)
return context.MethodResult;
else if (context.IsProperty)
return context.PropertyValue;
return null;
}
}
然后改造 Test 类型。
