最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#的const和static的定義和核心區(qū)別

 更新時間:2026年01月24日 10:55:35   作者:垂葛酒肝湯  
這篇文章主要介紹了C#中的const和static關(guān)鍵字的區(qū)別和使用場景,在Unity開發(fā)中,需要注意const和static的區(qū)別,避免內(nèi)存泄漏和序列化問題,感興趣的朋友跟隨小編一起看看吧

1.定義:

const:

  • 是編譯時常量
  • 本質(zhì):屬于 “類型級別” 的常量,值在編譯階段就已確定并嵌入程序集,運行時無法修改;
  • 必須在聲明時直接賦值,且只能是基礎(chǔ)值類型(int/float/string 等),不能是引用類型(除 string 外);
  • 不支持使用unity的API =>因為: Unity API 具有 “運行時依賴” 特性
// 正確:編譯期確定的固定值
public const string PlayerTag = "Player"; 
public const float DefaultMoveSpeed = 5.0f;
// 錯誤:Vector3是引用類型,且依賴Unity運行時API,編譯期無法確定值
// public const Vector3 DefaultSpawnPos = Vector3.zero; 
// 錯誤示例:方法的默認(rèn)值必須是編譯時常量,
// 報錯就說明vector3是一個引用類型,不能作為默認(rèn)值
public int GetDistance(Vector3 pos = Vector3.one)
{
    return (int)pos.magnitude;
}

static:

  • static不是類型,是修飾符
  • 本質(zhì):靜態(tài)成員(字段 / 方法 / 屬性)在程序運行時初始化(靜態(tài)構(gòu)造函數(shù)階段),內(nèi)存中只有一份副本,所有實例共享;
  • 語法要求:靜態(tài)字段可修改(除非加readonly),支持值類型 / 引用類型,可引用 Unity 運行時 API;
// 單例(最常見場景)
public class GameManager : MonoBehaviour
{
    public static GameManager Instance; // 靜態(tài)實例,全局訪問
    void Awake() => Instance = this;
}
// 靜態(tài)工具方法(無需實例,全局調(diào)用)
public static class MathTool
{
    public static float ClampSpeed(float speed) => Mathf.Clamp(speed, 0, 10);
}

2.const vs static 核心區(qū)別

對比維度const(編譯時常量)static(靜態(tài)成員)
賦值時機編譯期確定,聲明時必須賦值運行期初始化(靜態(tài)構(gòu)造函數(shù)),可延遲賦值
可修改性完全不可修改(編譯后固化)可修改(除非加static readonly
數(shù)據(jù)類型限制僅支持基礎(chǔ)值類型(int/float/string 等)支持所有類型(值類型 / 引用類型,如 GameObject)
Unity API 兼容性不兼容(無法引用 Unity 運行時 API,如 Vector3)兼容(可引用任意 Unity API)
內(nèi)存特性無內(nèi)存分配(編譯期嵌入代碼)內(nèi)存中唯一副本,直到程序域銷毀(游戲退出)
序列化無序列化(編譯期常量,Unity 不處理)Unity 默認(rèn)不序列化靜態(tài)字段(Inspector 不可見)

3.Unity 開發(fā)中的關(guān)鍵注意事項

1. 易混淆點:const vs static readonly

  • const:編譯期常量,無法引用 Unity API(如Vector3);
  • static readonly:運行時常量,初始化后不可修改,支持 Unity API,是 Unity 中 “運行時常量” 的正確寫法:
    // 正確:運行時初始化的常量,支持Unity API
    public static readonly Vector3 DefaultSpawnPos = new Vector3(0, 1, 0);

2. static 的核心坑點(Unity 面試高頻)

  • 內(nèi)存泄漏:靜態(tài)字段持有 Unity 對象(如 GameObject/Component)引用時,即使對象被Destroy,靜態(tài)引用仍會導(dǎo)致 GC 無法回收,引發(fā)內(nèi)存泄漏,解決方案:
    public static GameObject Player;
    void OnDestroy()
    {
        Player = null; // 銷毀對象時置空靜態(tài)引用,避免泄漏
    }
    
  • 序列化問題:Unity不序列化靜態(tài)字段,即使加[SerializeField]也無法在 Inspector 中修改,若需 “全局可配置”,建議用單例 + 非靜態(tài)序列化字段:
    public class Config : MonoBehaviour
    {
        public static Config Instance;
        [SerializeField] private float moveSpeed = 5.0f; // 序列化,可在Inspector修改
        public float MoveSpeed => moveSpeed; // 全局訪問
        void Awake() => Instance = this;
    }

4.什么時候用 const,什么時候用 static?

  • const:值永不改變、無運行時依賴(如固定標(biāo)簽、基礎(chǔ)數(shù)值);
  • static:需要全局共享狀態(tài)、單例、無需實例的工具方法;
  • static readonly:需要 “運行時常量”(如依賴 Unity API 的固定值)。

到此這篇關(guān)于C#的const和static的問題的文章就介紹到這了,更多相關(guān)C# const和static內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C# 預(yù)處理器指令的用法

    C# 預(yù)處理器指令的用法

    本文主要介紹了C# 預(yù)處理器指令的用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 簡單的觀察者模式示例分享

    簡單的觀察者模式示例分享

    這篇文章主要介紹了簡單的觀察者模式示例,抽象層定義了觀察者模式,實現(xiàn)層是對抽象層的具體實現(xiàn),需要的朋友可以參考下
    2014-03-03
  • 解析C#的擴展方法

    解析C#的擴展方法

    在本文中,主要對擴展方法進行了一些規(guī)則說明、聲明方式,使用方式,以及對擴展方法的意義和擴展方法的原理進行了簡單的解答。并在本文的最后給了一個枚舉的擴展方法代碼。
    2016-12-12
  • 手把手教你用c#制作一個小型桌面程序

    手把手教你用c#制作一個小型桌面程序

    本文介紹了使用Visual?Studio創(chuàng)建DLL項目,并通過屬性管理器導(dǎo)入工程屬性表的方法,詳細(xì)闡述了制作Windows動態(tài)庫的步驟,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • C#操作RabbitMQ的完整實例

    C#操作RabbitMQ的完整實例

    這篇文章主要為大家詳細(xì)介紹了C#操作RabbitMQ的完整實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • C#中的委托介紹

    C#中的委托介紹

    這篇文章主要介紹了C#中的委托介紹,本文講解了聲明委托的方式、匿名方法、多播委托等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • C#圖書管理系統(tǒng) 附源碼下載

    C#圖書管理系統(tǒng) 附源碼下載

    這篇文章主要為大家詳細(xì)介紹了C#圖書管理系統(tǒng),文章中附源碼下載,示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • C#關(guān)聯(lián)自定義文件類型到應(yīng)用程序并實現(xiàn)自動導(dǎo)入功能

    C#關(guān)聯(lián)自定義文件類型到應(yīng)用程序并實現(xiàn)自動導(dǎo)入功能

    今天通過本文給大家分享C#關(guān)聯(lián)自定義文件類型到應(yīng)用程序并實現(xiàn)自動導(dǎo)入功能,代碼中寫入了兩個注冊表,實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • Unity UGUI控制text文字間距

    Unity UGUI控制text文字間距

    這篇文章主要為大家詳細(xì)介紹了Unity UGUI控制text文字間距的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • C#正則函數(shù)用法實例【匹配、替換、提取】

    C#正則函數(shù)用法實例【匹配、替換、提取】

    這篇文章主要介紹了C#正則函數(shù)用法,結(jié)合實例形式分析了C#基于正則的匹配、替換、提取相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01

最新評論

克什克腾旗| 湘潭市| 军事| 章丘市| 宝山区| 芦山县| 新巴尔虎右旗| 西峡县| 磴口县| 宜黄县| 揭阳市| 神农架林区| 个旧市| 大城县| 锡林郭勒盟| 县级市| 西青区| 彩票| 亚东县| 保靖县| 潮安县| 资兴市| 龙游县| 长宁区| 安平县| 鞍山市| 施秉县| 嘉荫县| 永定县| 城市| 南岸区| 万安县| 疏附县| 商丘市| 贡觉县| 辉南县| 嘉鱼县| 长子县| 溧水县| 襄樊市| 江油市|