静的なフィールド・メソード
Pictureクラス全体でいくつオブジェクトがあるか記憶したい場合などには、クラス全体で値を共有してもつことが必要になります。つまり、
クラス全体に関連づけられる
ということがあります。
クラス全体に関連づけるためには、フィールド・メソッドの先頭にstaticという指定をつけます。これを静的メンバーと呼ぶことがあります。
class Picture
{
private Image img;
private int top;
private int left;
public static int count = 0;
}
これまでのフィールドではオブジェクトごとに値が存在しますが、staticをつけた静的なフィールドは、クラスに1つだけ存在することになるわけです。
staticをつけた静的メンバーは「クラス名.」をつけて利用します。
Picture.count
using System.Windows.Forms;
using System.Drawing;
namespace lesson5
{
class Sample3
{
static void Main(string[] args)
{
Form fm = new Form();
fm.Text = "ようこそC#へ";
Picture p1 = new Picture(); //オブジェクトを2つ作成します
Picture p2 = new Picture(); //オブジェクトを2つ作成します
Label lb = new Label();
lb.Text = Picture.CountPicture(); //静的メソッドを呼び出します
lb.Parent = fm;
Application.Run(fm);
}
}
class Picture
{
private Image img;
private int top;
private int left;
public static int count = 0; //静的なフィールドの定義です
public Picture()
{
img = Image.FromFile("E:\\099_Technology\\C#\\csharp\\csharp_train\\lesson2\\google.JPG");
top = 0;
left = 0;
count++; //コンストラクタが呼び出されたときに静的なフィールドであるCountの値を1増やします
}
public static string CountPicture()
{
return "Pictureは" + count + "枚あります。";
}
public void Move()
{
top = top + 10;
left = left + 10;
}
public void SetImage(Image i)
{
img = i;
}
public Image GetImage()
{
return img;
}
public int Top
{
set { top = value; } //プロパティとして値を設定する
get { return top; } //プロパティとして値を取得する
}
public int Left
{
set { left = value; } //プロパティとして値を設定する
get { return left; } //プロパティとして値を取得する
}
}
}
実行画面

クラス全体で管理される静的メンバーにはstaticをつける。
利用されている静的メンバー
ところで、staticがつけられた静的メンバーは、これまで私たちが利用してきたさまざまなクラスにも存在します。たとえば、コンソールへ出力では、Consoleクラスの静的メソッドであるWriteLine()メソッドを使っています。
Console.WriteLine(“よこそうC#へ”);
また、画面の読み込みでは、Imageクラスの静的なメソッドであるFromFile()メソッドを使っています。
Image.FromFile(“ファイル名”);
また、プログラムの本体となるMain()メソッドにもstaticをつける必要があります。静的メンバーはよく利用されていることがわかるでしょう。

コメント