C# の const キーワードと readonly キーワードの違いを説明する

WBOY
リリース: 2023-09-15 16:33:02
転載
1039 人が閲覧しました

C# の const キーワードと readonly キーワードの違いを説明する

C# では、const キーワードと readonly キーワードの両方を使用して、一度宣言すると変更できない不変の値を定義します。ただし、この 2 つには重要な違いがいくつかあります。

const

const 修飾子は、コンパイル時に既知で変更されない定数値、つまり不変の定数値を宣言します。 C# では、組み込み型のみを const としてマークできます。ユーザー定義型 (クラス、構造体など) を const にすることはできません。さらに、クラス メンバーの型 (メソッド、プロパティ、イベントなど) を定数としてマークすることはできません。

宣言時に定数を初期化する必要があります。

class Period{
   public const int hours = 12;
   public const int minutes = 60;
}
ログイン後にコピー

定数は、任意の可視性修飾子 (つまり、private、public、protected、protected inner、または private protected) でマークできます。

定数は静的な値としても機能します。つまり、定数の値はクラスのすべてのインスタンスと一致します。 static キーワードを使用して明示的にマークする必要はありません。クラスのインスタンス変数を使用して定数にアクセスすることはできません。クラス名を使用する必要があります。

読み取り専用としてマークされたフィールドは、宣言またはコンストラクター内でのみ宣言できます。クラスのインスタンスが作成されると、読み取り専用フィールドは変更できなくなります。

フィールドが値型の場合、読み取り専用としてマークすると不変になります。一方、読み取り専用フィールドが参照型の場合でも、変数が参照するオブジェクトのデータを変更できます。ただし、新しいオブジェクトを指すように参照を変更することはできません。

class Person{
   private readonly string _title;
   private readonly string _skill;
   public Person(string title, string skill){
      _title = title;
      _skill = skill;
   }
}
ログイン後にコピー

読み取り専用フィールドは、フィールド宣言およびコンストラクターで複数回割り当てることができます。さらに、使用されるコンストラクターに応じて、異なる値を持つことができます。

この 2 つの重要な違いは、あるアセンブリで宣言された const または readonly フィールドが別のアセンブリで使用されるときにコンパイルされることです。

< ul class="list">
  • const 値の場合は、検索と置換に似ています。定数値は、2 番目のアセンブリの中間言語に「焼き付け」られます。これは、定数を更新した場合、2 番目のアセンブリは再コンパイルするまで最初の値を保持することを意味します。

  • 読み取り専用値の場合、メモリ位置への参照のように機能します。値は 2 番目のアセンブリの中間言語には埋め込まれません。これは、メモリの場所が更新された場合、2 番目のアセンブリは再コンパイルせずに新しい値を取得することを意味します。読み取り専用フィールドを更新するということは、ユーザー アセンブリではなく、最初のアセンブリのみをコンパイルする必要があることを意味します。

  • リアルタイム デモンストレーション

    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 中国語 Web サイトの他の関連記事を参照してください。

    ソース:tutorialspoint.com
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート
    私たちについて 免責事項 Sitemap
    PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!