以下はJavaテキストをC#に書き換えたものです。C#の特徴や構文に合わせて適宜調整しています。
なぜ、インスタンスの理解が重要なのか、その理由
この記事では、弊社の新人エンジニア研修の参考にC#を解説します。
前回はstatic
メソッドについて解説しました。今回はインスタンスの活用について解説します。
いままでは話を単純にするためにインスタンスの話題はできるだけ避けてきました。しかし、ここからはいよいよオブジェクト指向の本丸、クラスからインスタンスを作成するということについて学んでいきます。
オブジェクト指向とは何だったか?
Objectとは「モノ」のことです。オブジェクト指向とは、モノの部品を組み合わせてプログラム全体を作り上げる考え方です。
例えば、新人エンジニアの皆さんがお使いのパソコンも多くの部品から構成されています。私たちはそれぞれの部品の内部構造を知らなくても、それらを組み合わせて使うことができます。この考え方をプログラムに応用し、再利用性やメンテナンス性の高いプログラムを作るのがオブジェクト指向です。
C#でのクラスとインスタンス
C#では、クラスを設計図とし、そこからインスタンスを生成します。
using System;
namespace Chap09
{
public class Example00
{
public static void Main()
{
// インスタンスを作成
Window window = new Window();
window.Width = 1000;
window.Height = 500;
window.Display();
}
}
public class Window
{
public int Width { get; set; }
public int Height { get; set; }
public void Display()
{
Console.WriteLine($"Width: {Width}, Height: {Height}");
}
}
}
フィールド(インスタンス変数)を持ったクラスの定義
以下は、新人エンジニアクラスを作成した例です。
namespace Chap09
{
public class NewEngineer
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Example01
{
public static void Main()
{
NewEngineer engineer = new NewEngineer();
Console.WriteLine(engineer.Id); // デフォルト値 0
Console.WriteLine(engineer.Name); // デフォルト値 null
}
}
}
メソッドを持ったクラスの定義
メソッドを追加してみましょう。
namespace Chap09
{
public class NewEngineer
{
public int Id { get; set; }
public string Name { get; set; }
public void Show()
{
Console.WriteLine($"私のIDは{Id}、名前は{Name}です。");
}
}
public class Example02
{
public static void Main()
{
NewEngineer engineer = new NewEngineer { Id = 1, Name = "Yamada" };
engineer.Show();
}
}
}
コンストラクタでの初期化
C#ではコンストラクタを使って初期化することができます。
namespace Chap09
{
public class NewEngineer
{
public int Id { get; }
public string Name { get; }
public NewEngineer(int id, string name)
{
Id = id;
Name = name;
}
public void Show()
{
Console.WriteLine($"ID: {Id}, Name: {Name}");
}
}
public class Example03
{
public static void Main()
{
NewEngineer engineer = new NewEngineer(2, "Tabuchi");
engineer.Show();
}
}
}
staticフィールドとstaticメソッド
C#ではstatic
を使ってクラス全体で共有する変数やメソッドを定義できます。
namespace Chap09
{
public class NewEngineer
{
public static int Count { get; private set; }
public int Id { get; }
public string Name { get; }
public NewEngineer(int id, string name)
{
Id = id;
Name = name;
Count++;
Show();
}
public void Show()
{
Console.WriteLine($"{Id}:{Name} - {Count}人目です。");
}
}
public class Example04
{
public static void Main()
{
new NewEngineer(1, "Yamazaki");
new NewEngineer(2, "Imai");
Console.WriteLine($"クラスの総人数: {NewEngineer.Count}");
}
}
}
メモリ管理
C#にはガーベージコレクションの仕組みがあり、不要になったインスタンスは自動的に解放されます。これにより、CやC++のように手動でメモリを管理する必要がありません。
これらの基礎をしっかり押さえておくことで、C#プログラミングの理解が深まります。
まとめができたら、アウトプットとして演習問題にチャレンジしましょう。