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
英文地址,請注明出處:http://en.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以其高性…