【C#】引用(Reference)句柄(Handle)
先上总结:
引用:是编程语言的一种机制,用于直接访问对象。
句柄:是系统分配的"间接访问标识",本质上是一个“资源管理器”或"指针的封装"。
引用:
特点:
是语言级别的概念
指向堆中的对象或数据(自身存在栈里)不需要开发者管理(自动GC管理)
用起来与普通变量类似,底层逻辑是指针
生命周期绑定在对象上
本质:
是一个托管指针
句柄:
特点:
是操作系统或框架层的概念
通常是一个整数ID(不是直接的指针)
用于间接引用系统资源(文件、窗口、线程、协程等等)
通过句柄查表找到实际资源
本质:
资源引用编号,常用于安全性+抽象
不能直接访问资源本体,必须“通过句柄访问”。
区别:
引用:所属语言级别(如C#)、本质上是托管指针、它指向了堆上的对象、操作方式是直接访问、生命周期由GC控制,安全性较低(可直接访问)。
句柄:所属系统级别或框架级别(Unity,WinAPI),本质上是整数ID或结构体,它指向了系统资源(线程、文件、窗口、协程等等),操作方式是通过API等的间接访问,生命周期控制由系统或者用户手动控制,安全性更高(系统需要校验句柄的合法性)。