全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C# __makeref, __reftype, __refvalue是什么 - C#中的隐藏关键字

__makeref、__reftype、__refvalue是C#中仅在unsafe上下文中由编译器识别的特殊标识符,用于底层指针操作:__makeref封装变量为TypedReference,__reftype提取其静态类型,__refvalue按指定类型读写值;三者均不安全、已弃用,应优先使用Span、ref T或Unsafe类替代。

这些不是C#语言的关键字,而是编译器识别的特殊标识符(compiler-recognized identifiers),属于不安全上下文中的底层指针操作辅助工具,仅在启用unsafe且目标平台支持的情况下由编译器直接处理,不能在普通代码中声明或重定义。

__makeref:获取变量的“引用句柄”

它把一个变量(包括值类型或引用类型)封装成TypedReference结构体,相当于创建了一个“可携带类型信息的引用”。这不是指针,也不等价于&variable,而是一种运行时能保留类型元数据的间接引用载体。

常见用法场景极少,主要出现在需要绕过泛型约束、做动态反射式赋值、或与旧版IL交互时。例如:

  • 调用__refvalue前必须先用__makeref构造TypedReference
  • 不能对临时表达式(如__makeref(5))使用,只能作用于有确定内存地址的变量(局部变量、字段等)
  • 结果TypedReference不可直接打印或比较,也不能跨方法传递(因包含栈地址,极易悬空)

__reftype:提取TypedReference背后的类型

给定一个通过__makeref生成的TypedReference__reftype返回其原始类型(Type对象)。它不触发装箱,也不访问实例数据,纯属元数据读取。

用途非常窄,典型例子是编写通用的“类型感知”调试工具或序列化底层逻辑:

  • Type t = __reftype(tr); —— trTypedReference变量
  • 返回的是编译时已知的静态类型,不是运行时实际类型(比如object o = 42; __makeref(o)__reftype仍返回typeof(object)

__refvalue:从TypedReference读取/写入值

这是三者中最危险也最易误用的一个。它允许你把一个TypedReference当作指定类型的左值来读或写:

  • int x = __refvalue(tr, int); —— 读取为int
  • __refvalue(tr, string) = "hello"; —— 写入为string

关键限制:

  • 类型参数必须与__makeref所绑定的原始变量类型兼容(否则运行时抛InvalidProgramException
  • 不能用于refout参数或readonly字段
  • 若原变量位于栈上(如局部值类型),而TypedReference被意外逃逸,__refvalue可能读到垃圾内存

基本上就这些。它们不是设计给日常开发用的,没有文档保障,.NET Core/.NET 5+ 中已被标记为“不推荐使用”,多数功能可用Spanref TUnsafe类或表达式树更安全地替代。除非你在写运行时、AOP框架或极底层互操作代码,否则建议完全避开。


# c#  # 工具  #   # .net  # String  # Object  # 封装  # 标识符  # 局部变量  # 结构体  # 变量类型  # int  # 指针  # 值类型  # 引用类型  # 泛型  # 对象  # typeof  # tr  # 也不  # 的是  # 这是  # 句柄  # 出现在  # 你在  # 已被  # 推荐使用  # 能在  # 这不是 


相关文章: 在线教育网站制作平台,山西立德教育官网?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  如何快速搭建高效WAP手机网站?  广东企业建站网站优化与SEO营销核心策略指南  免费网站制作appp,免费制作app哪个平台好?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  威客平台建站流程解析:高效搭建教程与设计优化方案  c++怎么用jemalloc c++替换默认内存分配器【性能】  全景视频制作网站有哪些,全景图怎么做成网页?  电商网站制作价格怎么算,网上拍卖流程以及规则?  如何获取上海专业网站定制建站电话?  建站为何优先选择香港服务器?  建站之星如何助力网站排名飙升?揭秘高效技巧  如何在Windows 2008云服务器安全搭建网站?  网站代码制作软件有哪些,如何生成自己网站的代码?  建站OpenVZ教程与优化策略:配置指南与性能提升  非常酷的网站设计制作软件,酷培ai教育官方网站?  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  建站之星如何修改网站生成路径?  如何规划企业建站流程的关键步骤?  常州企业网站制作公司,全国继续教育网怎么登录?  IOS倒计时设置UIButton标题title的抖动问题  如何在Golang中引入测试模块_Golang测试包导入与使用实践  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  香港网站服务器数量如何影响SEO优化效果?  已有域名如何快速搭建专属网站?  建站主机选哪家性价比最高?  浅析上传头像示例及其注意事项  ,南京靠谱的征婚网站?  建站之星后台密码遗忘?如何快速找回?  如何获取PHP WAP自助建站系统源码?  建站之星后台管理:高效配置与模板优化提升用户体验  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  如何选择靠谱的建站公司加盟品牌?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  大连 网站制作,大连天途有线官网?  linux top下的 minerd 木马清除方法  做企业网站制作流程,企业网站制作基本流程有哪些?  PHP 500报错的快速解决方法  建站主机默认首页配置指南:核心功能与访问路径优化  建站主机是否属于云主机类型?  如何解决VPS建站LNMP环境配置常见问题?  如何用IIS7快速搭建并优化网站站点?  招贴海报怎么做,什么是海报招贴?  建站之星代理费用多少?最新价格详情介绍  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  济南网站制作的价格,历城一职专官方网站?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  宿州网站制作公司兴策,安徽省低保查询网站?  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。