インスタンスコンストラクタが静的フィールドにアクセスするのはなぜですか?静的コンストラクタを介して静的フィールドを初期化し、間違ってインスタンスコンストラクタを使用して静的フィールドを初期化すると、2番目の初期化によって最初のものが上書きされます。インスタンスコンストラクタを使ってそれらをアクセス可能にする背景には何がありますか?コンストラクタは、静的メンバにアクセスしたいことができユースケースの一例として、(私のポイントを理解するには、以下の簡単なプログラムを見てください)どのようなロジックで、インスタンスコンストラクタは静的フィールドにアクセスする必要があります
using System;
class Program
{
static void Main()
{
Circle C1 = new Circle(5);
Console.WriteLine("The area of the first circle is {0}", C1.CalculateArea());
}
}
class Circle
{
public static float _Pi; // Since the value of pi will not change according to circles, we have to make it static
int _Radius; // This is an instance field, whose value is different for different instances of the class
static Circle() // A static constructor initializes the static fields
{
Console.WriteLine("Static constructor executed");
Circle._Pi = 3.14F;
}
public Circle(int Radius) // An instance constructor initializes the instance fields
{
Console.WriteLine("Instance constructor executed");
this._Radius = Radius;
Circle._Pi = 2.12F; // This again initializes the value of the pi to a different value as given by the static constructor
}
public float CalculateArea()
{
return this._Radius*this._Radius*Circle._Pi;
}
}
は、書き込みを不可能にする 'const'を使用します。 –
ダニエルそれは私の質問のポイントではありません。静的フィールドを書き込み不可能にする方法は他にもあります。私の懸念は、なぜこの機能が提供されているのですか?どのような例のように、インスタンスコンストラクタは静的フィールドを使用する必要がありますか? – TotalGadha