ロゴ

static修飾子の上手な使い方ーC#

C#で静的メンバの宣言に使う「static」。どういうときに使うのかを一緒に勉強しましょう。


オブジェクト指向のプログラミング言語として知られているC#。そんなC#にもオブジェクト指向"っぽくない"仕様があります。それが「static」です。

オブジェクト指向 = インスタンスを作成することだ、と昔私は思っていました。

しかし、staticをつけたメンバはクラスそのものに属することになります

Code

Program.cs

    
public static class Calc
{
 public static int Add(int a, int b)
 {
  return a + b;
 }
}

    

静的クラスを利用することで、インスタンスを作成しなくてもAddメソッドを呼び出すことができます。

Program.cs

    
int result = Calc.Add(3, 5);
Console.WriteLine($"Result is {result}.");

//output
Result is 8.

    

実践

あなたは図書館の利用者登録システムを作ることになりました。太郎さんを利用者に登録するプログラムを以下のようにして作りました。

Program.cs

    
 class Program
 {
  static void Main()
  {
   Person Taro = new("太郎", "男", 30);
   Persons.personList.Add(Taro);
  }
 }
 public static class Persons
 {
  //スタティック変数
  public static List<Person> personList = new();
 }
 public class Person
 {
  //インスタンス変数
  public string Name { get; set; }
  public string Gender { get; set; }
  public int Age { get; set; }
  public Person(string nm, string gen, string age)
  {
   Name = nm;
   Gender = gen;
   Age = age;
  }
 }

    

このとき、利用者を登録するリストはどんな場所からもすぐアクセスできなければなりません。そこで静的メンバの出番です。publicとstaticをつけてやると、グローバル変数のような使い方ができるようになります。

しかしこれは便利な反面、アクセス制限がゆるいだけあって簡単にデータが改ざんできてしまうのです。

その場その場でアクセスを適切に制限し、"良いプログラム"を作れるようになりたいですね。