CodeGym /コース /C# SELF /静的フィールドとメソッド

静的フィールドとメソッド

C# SELF
レベル 12 , レッスン 1
使用可能

1. オブジェクトのフィールド:ここにオブジェクトのデータが入る

C#(てか、ほとんどのプログラミング言語)ではよく「すべてはオブジェクト」って言うよね。オブジェクトってのは、パソコンのメモリ上にある「仮想のモノ」で、何かを保存できる(データ)し、何かできる(メソッド)んだ。つまり、オブジェクトには状態(フィールド、データ)とふるまい(メソッド)があるってこと。

オブジェクトの例:

  • ゲームのネコ(Cat
  • サイトのユーザー(User
  • 図書館の本(Book
  • 駐車場の車(Car

オブジェクトを作るときは、クラス(テンプレート)のコピーを作る感じで、そのコピーは自分だけのデータを持てるんだ。

フィールドってのは、オブジェクトの「中にある」変数で、そのオブジェクトだけのデータを保存するためのもの。

リアルな例

ネコには名前、年齢、色があるよね。これらのデータは個別で、ネコごとに違うんだ。


public class Cat
{
    public string Name;  // ネコの名前 — オブジェクトのフィールド
    public int Age;      // ネコの年齢 — オブジェクトのフィールド
    public string Color; // ネコの色 — オブジェクトのフィールド
}
オブジェクトのフィールド宣言例

オブジェクトを作るとき:

Cat cat1 = new Cat();
cat1.Name = "バーシク";
cat1.Age = 2;
cat1.Color = "グレー";

Cat cat2 = new Cat();
cat2.Name = "ムルカ";
cat2.Age = 5;
cat2.Color = "ブラック";

それぞれのオブジェクトは自分だけのフィールド値を持ってる!

オブジェクト Name Age Color
cat1 バーシク 2 グレー
cat2 ムルカ 5 ブラック

フィールドは、オブジェクトの中にある「ポケット」みたいなもので、そこに何かを入れられるんだ。

2. オブジェクトのメソッド:オブジェクトができること

メソッドは、オブジェクトの「アクション」や「できること」や「関数」だよ。メソッドは、オブジェクトで「呼び出せる」コードのかたまり。

リアルな例

ネコにはアクションがあるよね:鳴く、走る、食べるとか。


public class Cat
{
    public string Name;
    public void Meow()
    {
        Console.WriteLine($"{Name} は言う: ニャー!");
    }

    public void Sleep()
    {
        Console.WriteLine($"{Name} は寝てる。");
    }
}
オブジェクトのメソッド例

使い方:

Cat cat1 = new Cat();
cat1.Name = "バーシク";
cat1.Meow();   // バーシク は言う: ニャー!
cat1.Sleep();  // バーシク は寝てる。

それぞれのオブジェクトは自分のメソッドを持ってて、そのメソッドは自分のフィールドを使う!

3. 静的フィールド(static fields):みんなで共有するデータ

たまに、フィールドにオブジェクトごとのデータじゃなくて、クラス全体で共有したい情報を入れたいときがあるよね。例えば、ネコが何匹作られたかカウントしたり、全ネコ共通の「最大音量」を設定したり。

そんなときはC#の静的フィールドを使う。これはstaticってキーワードで宣言するよ。


public class Cat
{
    public string Name;
    public static int Count = 0; // 静的フィールド

    public Cat(string name)
    {
        Name = name;
        Count++; // ネコの総数を増やす
    }
}

//Catクラスの使い方         
Cat c1 = new Cat("バーシク");
Cat c2 = new Cat("ムルカ");

Console.WriteLine(Cat.Count); // 2 — 全オブジェクト共通
静的フィールドの使い方例

静的フィールドはクラス全体で1つだけ、全オブジェクトで「共有」される。
アクセスするときはクラス名で書くのが普通:Cat.Count

4. 静的メソッド(static methods)

静的メソッドは、特定のオブジェクトにひもづかず、クラス全体のものだよ。

  • こういうメソッドはオブジェクトを作らなくても呼び出せる
  • 静的メソッドの中では普通(非static)のフィールドやメソッドにはアクセスできない — だって、どのオブジェクトか分からないから!

public class MathUtils
{
    public static int Add(int a, int b)
    {
        return a + b;
    }
}
静的メソッドの例

使い方:

int sum = MathUtils.Add(2, 3); // 5

静的メソッドはよくユーティリティ — オブジェクトの状態に関係ない関数で使われるよ。

もうすでにたくさんの静的メソッドを使ってるはず:

Console.WriteLine();
Console.ReadLine();

Math.Round();
Math.Truncate();

5. メソッドとフィールドの比較

何これ? どう宣言する? どこに保存? 何のため? どうアクセス?
オブジェクトのフィールド
public string Name;
各オブジェクトごと オブジェクトの個別データ cat1.Name, cat2.Name
オブジェクトのメソッド
public void Meow(){}
各オブジェクトごと フィールドを使うアクション cat1.Meow()
静的フィールド
public static int C;
クラス全体で1つ 全オブジェクト共通のデータ Cat.C
静的メソッド
public static ...
クラス全体で1つ オブジェクトに依存しない「できること」 Cat.Method()

7. イラスト

普通のフィールドとメソッド:


.     +-----------------+
cat1: | Name = "バーシク" |
      | Age = 2         |
      +-----------------+

      +------------------+
cat2: | Name = "ムルカ"   |
      | Age = 5          |
      +------------------+

静的フィールド Count:

Cat.Count = 2    // 全ネコ共通の1つだけ

メソッドの呼び出し:

cat1.Meow();   // バーシク は言う: ニャー!
cat2.Meow();   // ムルカ は言う: ニャー!

静的メソッドの呼び出し:

MathUtils.Add(2, 3); // 5

まとめ

  • フィールド — 各オブジェクトの個別の特徴(プロパティ)を担当。
  • メソッド — オブジェクトができることを説明する。
  • 静的フィールド — 「共通」データ(カウンターやグローバル設定など)を保存するのに向いてる。
  • 静的メソッド — 特定のオブジェクトに依存しない操作(例えば数学関数)で使う。

8. よくある質問

静的フィールドにオブジェクト経由でアクセスできる?
技術的にはできる(cat1.Count)けど、クラス経由(Cat.Count)でアクセスするのが普通。混乱しないためにもね。

オブジェクトを作らずに非staticメソッドを呼べる?
無理!そういうメソッドは必ず特定のオブジェクトとそのデータを使うから。

静的メソッドの中で普通のフィールドやメソッドを使える?
無理!静的メソッドはどのオブジェクトか分からないから、アクセスできないよ。

「完全にstatic」なクラスって作れる?
できるよ。static classって書けばOK。そのクラスはnewで作れないし、メンバーは全部staticじゃないとダメ。

2
タスク
C# SELF, レベル 12, レッスン 1
ロック未解除
オブジェクト数をカウントする静的フィールド
オブジェクト数をカウントする静的フィールド
2
タスク
C# SELF, レベル 12, レッスン 1
ロック未解除
数値を判定するための静的メソッド
数値を判定するための静的メソッド
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION