カテゴリ: C# 更新日: 2025/12/14

C#のフィールドとプロパティの違いをわかりやすく解説!初心者でも理解できる基本構文

C#のフィールドとプロパティの違いをわかりやすく解説
C#のフィールドとプロパティの違いをわかりやすく解説

先生と生徒の会話形式で理解しよう

生徒

「C#でクラスを作るときに“フィールド”とか“プロパティ”って出てきますが、違いがよく分かりません。」

先生

「とても大切なポイントですね。フィールドとプロパティは似ているようで、役割が少し違うんですよ。」

生徒

「どう使い分けるんですか?具体的な例も知りたいです!」

先生

「それでは、フィールドとプロパティの違いをわかりやすく見ていきましょう!」

1. フィールドとは?

1. フィールドとは?
1. フィールドとは?

フィールド(field)とは、クラスの中で使われる変数のことです。データや値を直接保存する場所であり、主にクラスの内部で使われます。

たとえば、「人」のクラスを作るときに、「名前」や「年齢」を保存するための箱のような役割を持つのがフィールドです。

基本的なフィールドの書き方は以下のとおりです:


class Person
{
    public string name;
    public int age;
}

このように、nameageがフィールドになります。

2. プロパティとは?

2. プロパティとは?
2. プロパティとは?

プロパティ(property)は、フィールドに対して値の読み書きを制御する仕組みです。フィールドと違って、データを外から取得したり設定したりするときに、特別な処理を追加することができます。

プロパティは、見た目は変数のようですが、中ではgetsetというアクセサを使って処理します。

以下はプロパティの例です:


class Person
{
    private int age;

    public int Age
    {
        get { return age; }
        set { age = value; }
    }
}

ageはプライベートなフィールドとして隠しておき、外部からはAgeプロパティを通してアクセスします。

3. 自動実装プロパティの便利な書き方

3. 自動実装プロパティの便利な書き方
3. 自動実装プロパティの便利な書き方

プロパティを使うとき、フィールドを自分で書かずに自動的に作ってくれる便利な書き方があります。これを自動実装プロパティと言います。


class Person
{
    public string Name { get; set; }
}

このように書くだけで、裏側では自動的にフィールドが作られます。Nameプロパティを使ってデータの読み書きができます。

4. フィールドとプロパティの使い分け

4. フィールドとプロパティの使い分け
4. フィールドとプロパティの使い分け

では、フィールドとプロパティはどのように使い分ければよいのでしょうか?

  • フィールドは、基本的にクラス内部だけで使う変数として使います。
  • プロパティは、外部とデータをやりとりする窓口として使います。

たとえば、他のクラスから名前を設定したり取得したい場合、プロパティを使えば途中にチェック処理を入れたり、読み取り専用にしたりできます。

5. プロパティでデータのチェックもできる

5. プロパティでデータのチェックもできる
5. プロパティでデータのチェックもできる

プロパティを使うと、値をセットするときに条件をつけることもできます。例えば、年齢がマイナスにならないようにする処理を追加できます。


class Person
{
    private int age;

    public int Age
    {
        get { return age; }
        set
        {
            if (value >= 0)
            {
                age = value;
            }
        }
    }
}

このように、データを安全に管理したいときはプロパティを使うのがベストです。

6. 実際に使ってみよう

6. 実際に使ってみよう
6. 実際に使ってみよう

では、フィールドとプロパティを実際に使ったサンプルを見てみましょう。


class Person
{
    private string name;
    private int age;

    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public int Age
    {
        get { return age; }
        set
        {
            if (value >= 0) age = value;
        }
    }
}

class Program
{
    static void Main()
    {
        Person person = new Person();
        person.Name = "太郎";
        person.Age = 25;

        Console.WriteLine("名前: " + person.Name);
        Console.WriteLine("年齢: " + person.Age);
    }
}

実行結果:


名前: 太郎
年齢: 25

7. フィールドやプロパティに使うアクセス修飾子

7. フィールドやプロパティに使うアクセス修飾子
7. フィールドやプロパティに使うアクセス修飾子

最後に、アクセス修飾子についても触れておきましょう。

  • public:どこからでもアクセス可能(主にプロパティに使う)
  • private:クラスの中からしかアクセスできない(主にフィールドに使う)

このように、アクセス範囲を明確に分けることで、外からデータを勝手に変更されないように守ることができます。

まとめ

まとめ
まとめ

C#のクラス設計において「フィールド」と「プロパティ」は非常に基本的でありながら、とても重要な概念です。フィールドはクラス内部で使うための変数で、プロパティはそのフィールドに安全かつ柔軟にアクセスするための窓口のような存在です。特にプロパティは、値を設定する際の条件チェックや、読み取り専用にする設計ができるため、データの整合性を保ちやすくなります。

初心者にとっては、「フィールド=箱」「プロパティ=その箱にアクセスする鍵付きの扉」とイメージすると理解しやすいでしょう。また、C#にはプロパティを簡潔に記述できる自動実装プロパティという便利な構文もあるため、基本から発展的な使い方まで幅広く応用が可能です。

実際に以下のようなコードを書いてみると、プロパティの重要性がより実感できます。


class Student
{
    private int score;

    public int Score
    {
        get { return score; }
        set
        {
            if (value >= 0 && value <= 100)
            {
                score = value;
            }
        }
    }
}

class Program
{
    static void Main()
    {
        Student s = new Student();
        s.Score = 120; // 無効な値は無視される
        Console.WriteLine("点数: " + s.Score); // 出力: 点数: 0
        s.Score = 85;
        Console.WriteLine("点数: " + s.Score); // 出力: 点数: 85
    }
}

この例では、Scoreプロパティを通じて、0〜100の範囲に限って値を受け入れるようになっています。こうすることで、正しい値のみを保持できるように設計されています。

フィールドとプロパティを正しく使い分けることで、安全で信頼性のあるクラス設計ができるようになります。今後さまざまなC#アプリケーションを作る際にも、この考え方が役に立つでしょう。

先生と生徒の振り返り会話

生徒

「フィールドとプロパティって、ただ名前が違うだけかと思ってましたけど、使い分ける意味がちゃんとあるんですね!」

先生

「そうですね。フィールドはクラスの内部用、プロパティは外部とのやりとり用と覚えるとよいですよ。」

生徒

「プロパティを使えば、間違った値を設定されるのを防げるのもいいですね。これなら安心して使えそうです!」

先生

「その通り。プロパティはセキュリティやデータの信頼性を守るためにも大切な仕組みです。今後のプログラムでも、ぜひ意識して使ってくださいね。」

カテゴリの一覧へ
新着記事
New1
C#
C#のメモリ管理とガーベジコレクションの基礎を理解しよう
New2
C#
C#の参照型と値型の違いを初心者向けにやさしく解説!
New3
C#
C#のクエリ式とメソッド式の書き換え方を完全ガイド!LINQの2つの書き方をマスター
New4
C#
C#の戻り値にタプルを使う方法!複数の値を返すテクニック
人気記事
No.1
Java&Spring記事人気No1
C#
C#で文字列が数値か判定する方法を解説!char.IsDigitやTryParseの基本
No.2
Java&Spring記事人気No2
C#
C#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法
No.3
Java&Spring記事人気No3
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.4
Java&Spring記事人気No4
C#
C#のrefとoutキーワードとは?引数の参照渡しを理解しよう
No.5
Java&Spring記事人気No5
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.6
Java&Spring記事人気No6
C#
C#の引数と戻り値の基本!値を受け渡し・返す仕組みを理解しよう
No.7
Java&Spring記事人気No7
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説
No.8
Java&Spring記事人気No8
C#
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方