C#.netのconstとreadonlyの違い

Jan 19, 2017 am 11:07 AM

(1) Readonly と const は両方とも定数をマークするために使用されます。
(2) 初期化の代入が異なります。
const で変更された定数には、宣言と同時に値を割り当てる必要があります。例:

public class Class1  
{  
    public const int MaxValue = 10;       //正确声明  
    public const MInValue;                   //错误:常量字段要求提供一个值  
    public Class1()  
    {  
        MinValue = 10;  
    }  
}
ログイン後にコピー

readonly フィールドは、初期化 (宣言またはコンストラクター) 中に割り当てることができます。したがって、読み取り専用フィールドは、使用されるコンストラクターに応じて異なる値を持つ可能性があります。

public class Class1  
{  
    public readonly int c = 10;           //正确声明  
    public readonly int z;  
    public Class1()  
    {  
        z = 24;//正确  
    }  
    protected void Load()  
    {  
        z = 24;//错误:无法对只读的字段赋值(构造函数或变量初始值指定项中除外)  
    }  
}
ログイン後にコピー

readonly はインスタンスのメンバーであるため、異なるインスタンスは異なる定数値を持つことができ、これにより readonly がより柔軟になります。

public readonly Color Red = new Color(255, 0, 0);  
public readonly Color Green = new Color(0, 255, 0);  
public readonly Color Blue = new Color(0, 0, 255);
ログイン後にコピー

(3) const フィールドはコンパイル時の定数ですが、readonly フィールドは実行時の定数として使用できます。
const では、コンパイラがコンパイル時に特定の値を計算できる必要があります。コンパイル時に、定数が呼び出されるすべての場所が計算された値に置き換えられます。したがって、変数から値を抽出して定数を初期化することはできません。
readonly ではフィールドを定数に設定できますが、初期値を決定するために一部の操作を実行できます。 readonly は計算時に実行されるため、特定の変数で初期化できます。この値は実行時に決定されます。
(4) const はデフォルトで static であり、static に設定されている場合は readonly を宣言する必要があります。
(5) const で変更される値の型も制限されており、sbyte、byte、short、ushort、int、uint、long、ulong のいずれかに変換できます。 、char、float、double、10 進数、bool、string、enum 型または参照型。 const として宣言できる参照型は、値が null である文字列またはその他の参照型のみであることに注意してください。 readonly は任意のタイプにすることができます。
これは、const 定数が必要な場合、その型によってコンパイル中に定数が特定の値に計算されることが制限されている場合、それを static readonly として宣言することで解決できることを意味します。しかし、両者の間にはまだわずかな違いがあります。以下の 2 つの異なるドキュメントを見てください。
file1.cs

using System;  
namespace MyNamespace1  
{  
    public class MyClass1  
    {  
        public static readonly int myField = 10;  
    }  
}
ログイン後にコピー


file2.cs

namespace MyNamespace2  
{  
    public class MyClass1  
    {  
        public static void Main()  
        {  
            Console.WriteLine(MyNamespace1.MyClass1.myField);  
        }  
    }  
}
ログイン後にコピー

2 つのクラスは 2 つのファイル file1.cs と file2.cs に属し、別々にコンパイルされます。ファイル file1.cs 内のドメイン myField が静的読み取り専用として宣言されている場合、必要に応じて myField の値を 20 に変更すると、file2 の実行時にファイル file1.cs を file1.dll に再コンパイルするだけで済みます。 exe つまり20個もらえることになります。
ただし、static readonly を const に変更してから myField の初期化値を変更する場合は、file1.dll を参照するすべてのファイルを再コンパイルする必要があります。再コンパイルしないと、参照する MyNamespace1.MyClass1.myField が希望どおりに動作しません。これは、大規模なシステムの開発中に注意を払うことが特に重要です。
(6) object、Array(配列)、struct(構造体)はconst定数として宣言できません。

上記は、c#.net における const と readonly の違いです。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

読み取り専用機能とは何か、および Vue3 でのこの機能の使用方法 読み取り専用機能とは何か、および Vue3 でのこの機能の使用方法 May 10, 2023 pm 10:04 PM

Vue3 の readonly 機能の詳細説明 readonly は Vue3 で提供された新機能で、レスポンシブなオブジェクトを読み取り専用オブジェクトにするために使用されます。 readonly を使用すると、オブジェクトは読み取りのみ可能で変更できなくなり、アプリケーションの安定性とセキュリティが向上します。 Vue3 では、readonly 関数を使用してオブジェクトを読み取り専用オブジェクトに変換できます。例: import{readonly}from'vue'conststate=readonly({count:0}) 上記のコードでは、状態オブジェクトは次のようになります。読み取り専用オブジェクトに変換されます。つまり、state.count

C# の雇用の見通しはどのようなものですか? C# の雇用の見通しはどのようなものですか? Oct 19, 2023 am 11:02 AM

初心者でも経験豊富なプロフェッショナルでも、C# をマスターすることでキャリアへの道が開かれます。

いくつかの .NET オープンソース AI および LLM 関連プロジェクト フレームワークを共有する いくつかの .NET オープンソース AI および LLM 関連プロジェクト フレームワークを共有する May 06, 2024 pm 04:43 PM

現在、人工知能(AI)技術の開発は本格化しており、さまざまな分野で大きな可能性と影響力を発揮しています。本日、Dayao は、参考にしていただけるよう、4 つの .NET オープン ソース AI モデル LLM 関連プロジェクト フレームワークを共有します。 https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel は、OpenAI、Azure などの大規模言語モデル (LLM) を統合するように設計されたオープン ソース ソフトウェア開発キット (SDK) です。

C言語のconstを深く理解する C言語のconstを深く理解する Feb 18, 2024 pm 12:56 PM

C の const の詳細な説明とコード例 C 言語では、const キーワードを使用して定数を定義します。これは、プログラムの実行中に変数の値を変更できないことを意味します。 const キーワードは、変数、関数パラメータ、関数の戻り値を変更するために使用できます。この記事では、C 言語での const キーワードの使用法を詳細に分析し、具体的なコード例を示します。 const 変更された変数 const を使用して変数を変更する場合、その変数は読み取り専用変数であり、値が割り当てられると変更できないことを意味します。例: 定数

Windows 11でオーディオサービスが応答しない問題を修正する18の方法 Windows 11でオーディオサービスが応答しない問題を修正する18の方法 Jun 05, 2023 pm 10:23 PM

オーディオ出力と入力が Windows 11 で期待どおりに動作するには、特定のドライバーとサービスが必要です。これらは場合によってはバックグラウンドでエラーが発生し、オーディオ出力がない、オーディオ デバイスが見つからない、オーディオが歪むなどのオーディオの問題を引き起こすことがあります。 Windows 11 でオーディオ サービスが応答しない問題を修正する方法 以下で説明する修正プログラムから始めて、問題を解決できるまでリストを順に進めていくことをお勧めします。 Windows 11 では、さまざまな理由でオーディオ サービスが応答しなくなる可能性があります。このリストは、Windows 11 でオーディオ サービスの応答を妨げるほとんどの問題を確認し、修正するのに役立ちます。プロセスを進めるには、以下の関連セクションに従ってください。方法 1: オーディオ サービスを再起動します。

C言語でconstを使う方法 C言語でconstを使う方法 Sep 20, 2023 pm 01:34 PM

const は、定数、関数パラメータの const 修飾子、const で変更された関数の戻り値、および const で変更されたポインタを宣言するために使用できるキーワードです。詳細な導入: 1. 定数を宣言します。const キーワードを使用して定数を宣言できます。定数の値は、プログラムの実行中に変更できません。定数には、整数、浮動小数点数、整数などの基本的なデータ型を使用できます。文字など、またはカスタム データ型; 2. 関数パラメータ内の const 修飾子 const キーワードは関数のパラメータ内で使用でき、関数内でパラメータを変更できないことを示します。

Java フレームワークと .NET フレームワークのパフォーマンスの違い Java フレームワークと .NET フレームワークのパフォーマンスの違い Jun 03, 2024 am 09:19 AM

同時実行性の高いリクエスト処理の点では、.NETASP.NETCoreWebAPI は JavaSpringMVC よりも優れたパフォーマンスを発揮します。その理由としては、AOT の早期コンパイルにより起動時間が短縮され、開発者がオブジェクト メモリの割り当てと解放を行うため、より洗練されたメモリ管理が行われます。

C++ 関数における const キーワードの正しい使用法は何ですか? C++ 関数における const キーワードの正しい使用法は何ですか? Apr 11, 2024 pm 02:36 PM

C++ での const キーワードの正しい使用法: const を使用して関数を変更するということは、関数が渡されたパラメーターやクラス メンバーを変更しないことを意味します。 const を使用して関数ポインターを宣言することは、ポインターが定数関数を指すことを意味します。

See all articles