C# の const および readonly キーワードについて読みました。これらのキーワードの違いの 1 つは、const の値がコンパイル時に解決されるのに対し、readonly キーワードは実行時に解決されることです。私のプロジェクトでそれらを実装する機会はありませんでしたが。そこで、やってみようと思いました。他のプロジェクトで使用する mylibrary を作成しました。mylibrary のコードは次のとおりです。
namespace MyLibrary
{
public class Class1
{
public static readonly string MyVar = "Vikram";
//public readonly string MyVar;
//public Class1()
//{
// MyVar = "Test";
//}
}
}
次のように、このライブラリを他のコンソール プロジェクトのリファレンスとして使用します。
class Program
{
static void Main(string[] args)
{
//MyLibrary.Class1 class1 = new MyLibrary.Class1();
Console.WriteLine(MyLibrary.Class1.MyVar); // output is vikram
Console.ReadLine();
Console.WriteLine(MyLibrary.Class1.MyVar); // changed to Test but still op as vikram
Console.ReadLine();
}
}
これら 2 つの writeline の間で、ライブラリの「MyVar」の値を変更して再コンパイルします。readonly の概念に従って、メイン プロジェクトを再コンパイルせずにコンソール プロジェクトに反映されるはずです。
readonly キーワードの理解が間違っている場合は、修正してください。
PS私はこのリンクの答えを経験しました。回答の1つで、次のことが言及されています
readonly 値の場合は、メモリ位置への参照のようなものです。値は、AssemblyB の IL に焼き付けられません。つまり、メモリの場所が更新された場合、アセンブリ B は再コンパイルせずに新しい値を取得します。したがって、I_RO_VALUE が 30 に更新された場合は、AssemblyA をビルドするだけで済みます。すべてのクライアントを再コンパイルする必要はありません。
太い線が正確に何を意味するのか、誰か説明してください。これが私の例でやっていることだと思います。