2025-07-05 .NETCore特性(Attribute)底层原理解析 .NETCore特性(Attribute)底层原理解析 1. 特性的定义与使用在.NET Core中,特性通过派生自System.Attribute基类来定义。例如,定义一个简单的日志记录特性LogAttribute:csharp [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] public class LogAttribute : Attribute { public string Description { get; } public LogAttribute(string description) { Description = description; } }这个LogAttribute特性可以被附加到类或方法上,以记录相关的日志描述信息。使用方式如下:csharp [Log("This is a logging class.")] public class MyClass { }2. 特性的存储与读取编译时:在编译时,编译器会将所有的特性信息嵌入到程序的元数据中(Metadata)。这允许运行时通过反射机制访问这些信息,而不... 2025年07月05日 18 阅读 0 评论
2025-06-12 深入.NETCore:反射的底层原理与实现 深入.NETCore:反射的底层原理与实现 一、.NET Core的内存管理与类型系统在.NET Core中,所有对象都是从System.Object派生而来,而类型信息则通过Type System来管理。Type System不仅负责维护所有类型的元数据,还为运行时提供了类型检查和转换的依据。每个类型都通过System.Type对象表示,该对象包含了类型的所有必要信息,如方法、属性、字段等。二、元数据与反射的关系元数据(Metadata)是程序编译时生成的信息,它描述了程序中的类型、成员、方法签名等。在.NET Core中,元数据以一种称为Portable Executable (PE)格式的文件存储,例如.dll或.exe文件。当使用反射时,.NET运行时通过访问这些PE文件中的元数据来获取类型信息。例如,使用typeof(T)操作符时,CLR会从当前程序集或引用的程序集中读取并解析T的元数据。三、反射的实现过程 解析阶段:当调用typeof(T)时,CLR首先检查T是否在当前程序集或引用的程序集中已定义。如果是,则直接从该程序集的元数据中读取T的类型信息;如果不是,则向公共语言运行时(CLR)的元数据服务请求T的元数... 2025年06月12日 30 阅读 0 评论