TEngine学习

关于静态类中的静态变量赋值:

   public static class ActorEventDefine{public static readonly int ScoreChange = RuntimeId.ToRuntimeId("ActorEventDefine.ScoreChange");public static readonly int GameOver = RuntimeId.ToRuntimeId("ActorEventDefine.GameOver");public static readonly int EnemyDead = RuntimeId.ToRuntimeId("ActorEventDefine.EnemyDead");public static readonly int PlayerDead = RuntimeId.ToRuntimeId("ActorEventDefine.PlayerDead");public static readonly int AsteroidExplosion = RuntimeId.ToRuntimeId("ActorEventDefine.AsteroidExplosion");public static readonly int EnemyFireBullet = RuntimeId.ToRuntimeId("ActorEventDefine.EnemyFireBullet");public static readonly int PlayerFireBullet = RuntimeId.ToRuntimeId("ActorEventDefine.PlayerFireBullet");}

在 Unity 中,static readonly 字段的赋值时机遵循 .NET 的规则:

当第一次访问 ActorEventDefine 类本身或其中的任何成员时,CLR 会执行该类的类型初始化(Type Initializer)

此时,所有 static readonly 字段会按顺序执行赋值(即调用 RuntimeId.ToRuntimeId(...))。

关键点:

  • 延迟初始化:直到首次访问时才会执行,而非游戏启动时立即执行。

  • 线程安全:CLR 保证静态构造函数是线程安全的,多线程访问时不会重复初始化。

  • 性能:由于 RuntimeId.ToRuntimeId 可能是计算密集型操作,首次访问可能会有轻微延迟,但后续访问无额外开销。


具体流程:

  1. 首次访问触发
    当你第一次通过代码访问 ActorEventDefine.ScoreChange 或其他字段,或显式使用 ActorEventDefine 类时(例如在初始化时注册事件监听),CLR 会检查该类是否已初始化。

  2. 静态构造函数执行
    由于代码中没有显式定义 static ActorEventDefine() 构造函数,编译器会自动生成一个隐式的静态构造函数,其中包含所有 static readonly 字段的赋值逻辑。

  3. 字段初始化顺序
    所有 static readonly 字段会按代码中的顺序初始化(ScoreChangeGameOver → ...),且仅执行一次,后续访问直接复用已初始化的值

出处:

根据 Microsoft C# 编程指南官方文档 的说明:

“如果未提供静态构造函数来初始化静态字段,会将所有静态字段初始化为其默认值。如果静态构造函数类中存在静态字段变量初始值设定项,它们将以在类声明中显示的文本顺序运行。初始值设定项紧接着静态构造函数之前运行。”

这意味着,当你没有显式定义一个 static ActorEventDefine() 构造函数时,编译器会自动生成一个隐式的静态构造函数(即“类型构造器”),并将所有 static readonly 字段的初始化代码插入到这个构造器中,按声明顺序执行。

此外,CLR via C# 一书中也明确指出:

“当你使用内联语法初始化静态字段时,C# 编译器会将这些初始化语句移动到它自动生成的类型构造器中。”

因此,“编译器会自动生成一个隐式的静态构造函数”这一行为在官方文档和技术规范中均有明确依据,并非推测。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/91940.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

猎板:在 5G 与 AI 时代,印制线路板如何满足高性能需求

5G 与 AI 技术的深度融合,推动电子设备向高速传输、高算力、高集成方向发展,印制线路板(PCB)作为核心载体,其性能直接决定终端设备的运行效率与可靠性。猎板 PCB 聚焦 5G 通信的高频需求与 AI 算力的密集需求&#xff…

教你如何借助AI精读文献

目录1. 原文2. 对文献有一个快速的理解3. 专业术语解读4. 解答疑问5. 借助AI翻译摘要和引言部分5.1 **摘要 (Abstract)**5.2 **引言 (Introduction)**6. 介绍论文中的“Stack-Propagation”7. 查阅论文里的参考文献,看看他是如何在Introduction中引述研究进展文献&a…

FastAdmin框架超级管理员密码重置与常规admin安全机制解析-卓伊凡|大东家

FastAdmin框架超级管理员密码重置与常规admin安全机制解析-卓伊凡|大东家我们可以看到admin账户是不允许直接修改的,这也是目前fastadmin 框架不允许的,那么如何处理一、FastAdmin超级管理员密码重置方法当FastAdmin的超级管理员密码忘记或需要重置时&am…

我做的基础服务项目,是如何实现 API 安全与限流的(短信、邮件、文件上传、钉钉通知)

我做的基础服务项目,是如何实现 API 安全与限流的(短信、邮件、文件上传、钉钉通知)一、背景 最近我做了一个基础服务项目,主要对外提供短信、邮件、文件上传和钉钉通知等基础功能。这些接口是多个业务系统都要调用的,…

(Python)类和类的方法(基础教程介绍)(Python基础教程)

源代码:class Students:stats"大学"def __init__(self,name,age,sex,credit):self.namenameself.ageageself.sexsexself.creditcreditdef tell(self):return f"{self.name}说:你好"class Teachers(Students):stats"教师"d…

网络智能体研究综述

网络智能体研究综述1.什么是网络智能体1.1.核心特征1.2.分类方式1.2.1.按功能定位1.2.2. 按网络结构1.2.3.按应用场景1.3.典型应用场景1.4.技术基础1.5.发展趋势与挑战1.5.1.发展趋势1.5.2.核心挑战2.网络智能体盘点3.阿里的WebSailor3.1.WebSailor的主要功能和技术特点3.2.技术…

git 介绍与使用教程

Git 是一个 分布式版本控制系统,每个开发者都有一个完整的本地仓库(包含完整历史记录),而远程仓库(如 GitHub、GitLab、Gitee)是团队共享的中央仓库。它们的关系如下:本地仓库(Local…

[AI风堇]基于ChatGPT3.5+科大讯飞录音转文字API+GPT-SOVITS的模拟情感实时语音对话项目

[AI风堇]最近利用工作日的晚间和周末时间,我完成了一个有趣的Python编程小项目。这个项目的灵感来源于上个月在B站看到的"科技怪咖"UP主分享的一个视频,视频中展示了一个名为"DataMagic"的自动化数据处理工具,能够智能分…

物联网-规则引擎的定义

构建物联网系统中的规则引擎是一个系统性的工程,它需要处理来自海量设备的实时数据流,并根据预定义的逻辑触发动作。以下是构建一个高效、可靠、可扩展的物联网规则引擎的关键步骤和考虑因素: 核心目标 实时性: 快速处理设备事件并…

SIMATIC WinCC Unified 使用 KPI 优化流程

大家好,我是东哥说-MES基本知识 33.1 KPI组态简介现有工厂结构表示在面向对象的组态中定义标准化 KPI 概念的起点。 可通过在工厂视图中用作实例的工厂对象类型来映射工厂的各组件。在“性能指 标”(Performance indicators) 全局编辑器中,可定义全局操作…

机器学习-多重线性回归和逻辑回归

目录 1. 多重线性回归 1.1 多元线性回归 1.2 向量化(矢量化) 1.3 多元线性回归的梯度下降算法 1.4 正规方程 2. 特征缩放 2.1 特征缩放 2.2 检查梯度下降是否收敛 2.3 学习率的选择 2.4 特征工程 2.5 多项式回归 3. 逻辑回归 3.1 Motivatio…

编程思想:程序自身的模型/函数模型硬件标准如何实现

前言前面提到过写程序的过程:根据各种需求,构建程序模型(逻辑模型),再用代码实现.本贴关于程序自身的模型以及函数模型,以及推导硬件标准从逻辑到代码的思路.程序自身的模型如图应用APP接受输入---鼠标动作,键盘输入的字符等,得到结果---画面,显示数据等.工具包括框架和编程语言…

基于JAVA Spring Boot物理实验考核系统设计与实现 (文档+源码)

目录 一.研究目的 二.需求分析 三.数据库设计 四.系统页面展示 五.源码获取方式 一.研究目的 信息数据的处理完全依赖人工进行操作,会耗费大量的人工成本,特别是面对大量的数据信息时,传统人工操作不仅不能对数据的出错率进行保证&…

【国内电子数据取证厂商龙信科技】安卓镜像提取与解析

前言随着智能手机更新迭代越来越快,手机厂家对手机系统安全性要求也越来越严格。系统安全性提高对公民的隐私是一件好事,但是对于取证行业确实一个大难题,手机系统安全性的提高意味着我们能对犯罪嫌疑人手机的提取数据和恢复数据越来越少&…

Java+Ollama 本地部署 DeepSeek-R1 对话机器人:从 0 到 1 实战指南

作为 Java 开发者,想在本地搭建一个能理解代码、支持多轮对话的 AI 机器人?DeepSeek-R1 这款开源大模型绝对值得一试。今天就带大家用 OllamaJava 实现本地化部署,全程实操,新手也能跟着做! 一、先搞懂:为…

Java Web项目Dump文件分析指南

目录 1. Dump文件的类型与作用 2. 生成Dump文件的方法 3. 分析Dump文件的工具 4. 分析步骤与常见问题解决 5. 最佳实践与预防 在Java Web项目中,dump文件是JVM(Java虚拟机)在发生崩溃、内存溢出或特定事件时生成的内存快照文件&#xff0…

Ubuntu网卡驱动无效,不能连接wifi上网

一、现象及临时网络准备 我的另一篇博客详细介绍了前期准备工作: 知乎:Ubuntu网卡驱动无效,不能连接wifi上网知乎:Ubuntu网卡驱动无效,不能连接wifi上网 在此基础上,还得给Ubuntu配好镜像源,…

LeetCode Hot 100 二叉搜索树中第 K 小的元素

给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。示例 1:输入:root [3,1,4,null,2], k 1 输出:1示例 2:输入&#xff1a…

5-大语言模型—理论基础:注意力机制优化

目录 1、稀疏注意力机制(Sparse Attention) 1.1、核心问题:传统注意力的 “效率瓶颈” 1.2、具体稀疏策略(详细计算逻辑) 1.2.1、局部窗口稀疏(Local Window Sparse) 1.2.2、基于内容的稀疏…

轻松学习C++:基本语法解析

基本语法解析引言基本语法变量和数据类型运算符控制结构函数示例代码:计算圆的面积引言 C是一种功能强大的通用编程语言,由Bjarne Stroustrup于1979年创建。它在C语言的基础上进行了扩展,支持面向对象编程、泛型编程和过程式编程。C以其高性…