フィールドとプロパティ
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 であり、プロパティを介してアクセスされます。プロパティを使用すると、ロジックやバリデーションを追加したり、データのアクセスや変更方法を制御したりできます。自動実装プロパティは、追加のロジックが必要ない場合に便利です。
チャレンジ
中級フィールドとプロパティの違いを示す 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}");
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。