目錄
const
範例
#輸出
首頁 後端開發 C#.Net教程 解釋C#中const和readonly關鍵字的差別

解釋C#中const和readonly關鍵字的差別

Sep 15, 2023 pm 04:33 PM

解釋C#中const和readonly關鍵字的差別

在 C# 中,const 和 readonly 關鍵字都用來定義不可變值,這些值一旦宣告就無法修改。但是,兩者之間存在一些重要的差異。

const

const 修飾符宣告在編譯時已知且不會變更的常數值,即它們是不可變的。在 C# 中,只能將內建類型標記為 const。使用者定義的類型(例如類別、結構體等)不能是 const。此外,類別成員類型(例如方法、屬性或事件)不能標記為常數。

您必須在宣告期間初始化常數。

class Period{
   public const int hours = 12;
   public const int minutes = 60;
}
登入後複製

常數可以用任何可見性修飾符標記,即私有、公有、受保護、受保護的內部或私有受保護。

常數也充當靜態值,即常數的值與該類別的所有實例。您不必使用 static 關鍵字明確標記它們。您無法使用該類別的實例變數存取常數,而必須使用類別名稱。

標記為唯讀的欄位只能在宣告或在建構子中。一旦建立了類別的實例,就無法修改唯讀欄位。

如果該欄位是值類型,則將其標記為唯讀會使其不可變。另一方面,如果只讀欄位是引用類型,那麼您仍然可以更改變數引用的物件的資料。但是,您無法變更該引用以指向新物件。

class Person{
   private readonly string _title;
   private readonly string _skill;
   public Person(string title, string skill){
      _title = title;
      _skill = skill;
   }
}
登入後複製

只讀欄位可以在欄位宣告和任何建構函式中多次賦值。此外,根據所使用的建構函數,它可以具有不同的值。

兩者之間的一個重要差異是,在一個程式集中宣告的 const 或 readonly 欄位在另一個程式集中使用時會被編譯。

< ul class="list">
  • 對於 const 值,它就像尋找替換。此常數值被「烘焙」到第二個程式集的中間語言。這意味著,如果您更新常數,第二個組件仍將具有第一個值,直到您重新編譯它為止。

  • 對於唯讀值,它就像一個引用到一個記憶體位置。該值不會嵌入到第二個組件的中間語言中。這意味著如果記憶體位置被更新,第二個組件無需重新編譯即可取得新值。更新只讀欄位意味著只需要編譯第一個組件,而無需編譯任何使用者組件。

  • 範例

     即時示範

    using System;
    class Program{
       static void Main(){
          Console.WriteLine(Period.HOURS);
          var person = new Person("John", "Programmer");
          person.Print();
       }
    }
    class Period{
       public const int HOURS = 12;
       public const int MINUTES = 60;
    }
    class Person{
       private readonly string _title;
       private readonly string _skill;
       public Person(string title, string skill){
          _title = title;
          _skill = skill;
       }
       public void Change(string skill){
          // Error: A readonly field cannot be assigned to
          // this._skill = skill;
       }
       public void Print(){
          Console.WriteLine($"{_title}: {_skill}");
       }
    }
    登入後複製

    #輸出

    12
    John: Programmer
    登入後複製

    以上是解釋C#中const和readonly關鍵字的差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱門文章

    <🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
    4 週前 By 尊渡假赌尊渡假赌尊渡假赌
    北端:融合系統,解釋
    4 週前 By 尊渡假赌尊渡假赌尊渡假赌
    Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
    3 週前 By 尊渡假赌尊渡假赌尊渡假赌

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)

    熱門話題

    Java教學
    1674
    14
    CakePHP 教程
    1429
    52
    Laravel 教程
    1333
    25
    PHP教程
    1278
    29
    C# 教程
    1257
    24
    從網絡到桌面:C#.NET的多功能性 從網絡到桌面:C#.NET的多功能性 Apr 15, 2025 am 12:07 AM

    C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

    c#.net的持續相關性:查看當前用法 c#.net的持續相關性:查看當前用法 Apr 16, 2025 am 12:07 AM

    C#.NET依然重要,因為它提供了強大的工具和庫,支持多種應用開發。 1)C#結合.NET框架,使開發高效便捷。 2)C#的類型安全和垃圾回收機制增強了其優勢。 3).NET提供跨平台運行環境和豐富的API,提升了開發靈活性。

    C#作為多功能.NET語言:應用程序和示例 C#作為多功能.NET語言:應用程序和示例 Apr 26, 2025 am 12:26 AM

    C#在企業級應用、遊戲開發、移動應用和Web開發中均有廣泛應用。 1)在企業級應用中,C#常用於ASP.NETCore開發WebAPI。 2)在遊戲開發中,C#與Unity引擎結合,實現角色控制等功能。 3)C#支持多態性和異步編程,提高代碼靈活性和應用性能。

    將C#.NET應用程序部署到Azure/AWS:逐步指南 將C#.NET應用程序部署到Azure/AWS:逐步指南 Apr 23, 2025 am 12:06 AM

    如何將C#.NET應用部署到Azure或AWS?答案是使用AzureAppService和AWSElasticBeanstalk。 1.在Azure上,使用AzureAppService和AzurePipelines自動化部署。 2.在AWS上,使用AmazonElasticBeanstalk和AWSLambda實現部署和無服務器計算。

    C#和.NET運行時:它們如何一起工作 C#和.NET運行時:它們如何一起工作 Apr 19, 2025 am 12:04 AM

    C#和.NET運行時緊密合作,賦予開發者高效、強大且跨平台的開發能力。 1)C#是一種類型安全且面向對象的編程語言,旨在與.NET框架無縫集成。 2).NET運行時管理C#代碼的執行,提供垃圾回收、類型安全等服務,確保高效和跨平台運行。

    C#.NET:使用.NET生態系統構建應用程序 C#.NET:使用.NET生態系統構建應用程序 Apr 27, 2025 am 12:12 AM

    如何利用.NET構建應用?使用.NET構建應用可以通過以下步驟實現:1)了解.NET基礎知識,包括C#語言和跨平台開發支持;2)學習核心概念,如.NET生態系統的組件和工作原理;3)掌握基本和高級用法,從簡單控制台應用到復雜的WebAPI和數據庫操作;4)熟悉常見錯誤與調試技巧,如配置和數據庫連接問題;5)應用性能優化與最佳實踐,如異步編程和緩存。

    .NET框架與C#:解碼術語 .NET框架與C#:解碼術語 Apr 21, 2025 am 12:05 AM

    .NETFramework是一個軟件框架,C#是一種編程語言。 1..NETFramework提供庫和服務,支持桌面、Web和移動應用開發。 2.C#設計用於.NETFramework,支持現代編程功能。 3..NETFramework通過CLR管理代碼執行,C#代碼編譯成IL後由CLR運行。 4.使用.NETFramework可快速開發應用,C#提供如LINQ的高級功能。 5.常見錯誤包括類型轉換和異步編程死鎖,調試需用VisualStudio工具。

    C#.NET開發:入門的初學者指南 C#.NET開發:入門的初學者指南 Apr 18, 2025 am 12:17 AM

    要開始C#.NET開發,你需要:1.了解C#的基礎知識和.NET框架的核心概念;2.掌握變量、數據類型、控制結構、函數和類的基本概念;3.學習C#的高級特性,如LINQ和異步編程;4.熟悉常見錯誤的調試技巧和性能優化方法。通過這些步驟,你可以逐步深入C#.NET的世界,並編寫高效的應用程序。

    See all articles