Menu
Coddy logo textTech

フィールドとプロパティ

CoddyのC#ジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 6/70。

フィールドは class 内で直接宣言される変数です。プロパティは、get および set アクセサを使用してフィールドへの制御されたアクセスを提供するメンバです。

フィールドはデータを直接格納します

public class Person
{
    // フィールド - 変数の直接的な格納
    private string name;
    private int age;
}

プロパティは get と set を使用して、制御されたアクセスを提供します。

public class Person
{
    private string name;
    
    // バッキングフィールドを持つプロパティ
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}

自動実装プロパティ (短縮形)

public class Person
{
    // 自動実装プロパティ
    public string Name { get; set; }
    public int Age { get; set; }
}

プロパティには検証ロジックを含めることができます

public class Person
{
    private int age;
    
    public int Age
    {
        get { return age; }
        set 
        { 
            if (value >= 0 && value <= 120)
                age = value;
        }
    }
}

読み取り専用プロパティ (get アクセサーのみ)

public class Circle
{
    private double radius;
    
    public double Radius
    {
        get { return radius; }
    }
    
    // 読み取り専用の計算済みプロパティ
    public double Area
    {
        get { return Math.PI * radius * radius; }
    }
}

フィールドは通常 private であり、プロパティを介してアクセスされます。プロパティを使用すると、ロジックやバリデーションを追加したり、データのアクセスや変更方法を制御したりできます。自動実装プロパティは、追加のロジックが必要ない場合に便利です。

challenge icon

チャレンジ

中級

フィールドとプロパティの違いを示す BankAccount クラスを作成してください:

  • 口座残高を保存するためのプライベートな balance フィールド
  • 自動実装プロパティ AccountName
  • balance フィールドを返す読み取り専用プロパティ Balance
  • プライベートフィールドを変更する Deposit および Withdraw メソッド

チートシート

フィールドはクラス内で直接宣言される変数であり、プロパティは get および set アクセサを使用してフィールドへの制御されたアクセスを提供します。

フィールドはデータを直接格納します:

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

プロパティは get と set を使用して制御されたアクセスを提供します:

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

自動実装プロパティ(短縮形):

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

検証ロジックを持つプロパティ:

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

読み取り専用プロパティ(get アクセサのみ):

public double Area
{
    get { return Math.PI * radius * radius; }
}

フィールドは通常 private であり、プロパティを介してアクセスされます。プロパティを使用すると、ロジックや検証を追加したり、データへのアクセスや変更方法を制御したりできます。

自分で試してみよう

using System;

class Program
{
    static void Main()
    {
        string accountName = Console.ReadLine();
        decimal initialBalance = decimal.Parse(Console.ReadLine());
        decimal depositAmount = decimal.Parse(Console.ReadLine());
        
        BankAccount account = new BankAccount(accountName, initialBalance);
        
        Console.WriteLine($"Account: {account.AccountName}");
        Console.WriteLine($"Initial Balance: ${account.Balance}");
        
        account.Deposit(depositAmount);
        Console.WriteLine($"After Deposit: ${account.Balance}");
        
        string result = account.Withdraw(2000);
        Console.WriteLine($"Withdraw attempt: {result}");
        Console.WriteLine($"Final Balance: ${account.Balance}");
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン