プログラミングを始めると必ず出会う「オブジェクト指向」という考え方。その中心にあるのが「オブジェクト」です。本記事ではC#のオブジェクトを初心者向けに、基礎から実践例まで丁寧に解説します。クラスとの関係やオブジェクトの作り方、使い方を一つずつ確認して、明日から自信を持ってコードを書けるようになりましょう。
オブジェクトとは何か?
オブジェクトは「状態」と「振る舞い」を持つ実体です。イメージとしては、現実世界の「車」や「人間」をプログラムの中で表現する箱のようなもの。
- 状態(プロパティ/フィールド)
オブジェクトが持つデータ。例えば車なら「色」「速度」「メーカー」など。 - 振る舞い(メソッド)
オブジェクトが行う動作。車なら「加速する」「ブレーキをかける」といった機能。 
クラスはこうしたオブジェクトの設計図にあたり、そこから具体的なオブジェクト(インスタンス)を作り出します。
クラスの定義とオブジェクトの生成
まずはクラスの書き方から見てみましょう。以下はシンプルな「Dog」クラスの例です。
public class Dog
{
    public string Name { get; set; }
    public int Age { get; set; }
    public void Bark()
    {
        Console.WriteLine($"{Name}:ワンワン!");
    }
}
public class Dog:他の場所からアクセスできるクラス(public class)Name/Age:犬の名前と年齢を表すプロパティBark():吠える動作を定義するメソッド
このクラスを元にオブジェクトを作るときは new 演算子を使います。
var myDog = new Dog
{
    Name = "ポチ",
    Age = 3
};
myDog.Bark();  // 出力例:ポチ:ワンワン!
3~4行目のように、オブジェクト初期化子を利用するとプロパティを簡潔にセットできます。
オブジェクトのライフサイクル
オブジェクトのライフサイクルは以下のような流れになっています。
- クラス定義
 - メモリ確保(
new演算子) - プロパティ初期化(自動的に行われる)
 - メソッド呼び出し
 - 不要になったらガベージコレクションが解放
 
この流れを理解すると、なぜオブジェクトを使い終わったあとにメモリが自動的に回収されるのか、またメモリリークを防ぐ方法が見えてきます。
アクセス修飾子とカプセル化
オブジェクト指向の大切な概念の一つが「カプセル化」です。クラスの外部からは必要な部分だけを公開し、内部の実装を隠すことで安全かつ保守しやすいコードを実現します。
| 修飾子 | 説明 | 
|---|---|
| public | どこからでもアクセス可能 | 
| private | クラス内部でのみアクセス可能 | 
| protected | クラスと派生クラス内でアクセス可能 | 
| internal | 同じアセンブリ内でアクセス可能 | 
例えばフィールドを private にして、外部からはプロパティ経由でのみ値を読み書きする設計が一般的です。
継承とポリモーフィズム(多態性・多様性)
継承
新しいクラスを既存クラスから派生させることで、共通する機能を再利用できます。
public class Animal
{
    public string Name { get; set; }
    public virtual void Speak()
    {
        Console.WriteLine("…");
    }
}
public class Cat : Animal
{
    public override void Speak()
    {
        Console.WriteLine($"{Name}:ニャー");
    }
}
ポリモーフィズム(多様性・多態性)
同じメソッド名でも、クラスごとに異なる動作を実装できます。これによりコードを柔軟に扱えるようになります。
具体的な活用シーン
- データベースから取得したレコードをオブジェクト(DTO=Data Transfer Object)として扱う
 - MVC(Model ・View ・Controller)アプリでViewModelにページ表示用のオブジェクトを用意する
 - プラグイン機能を実現するためにインターフェースを定義し、動的にオブジェクトを読み込む
 
こうしたパターンを覚えておくと、現実のアプリ開発ですぐに役立ちます。
まとめ
C#のオブジェクトは「状態(プロパティ)」と「振る舞い(メソッド)」を組み合わせた強力な表現手段です。クラスを設計し、インスタンスを生成して扱う流れをマスターすれば、保守性や再利用性に優れたプログラムを書けるようになります。次は自分でクラスを設計し、小さなプロジェクトに取り入れてみましょう。少しずつ慣れることで、オブジェクト指向のメリットを肌で感じられるはずです!

  
  
  
  


