自動実装プロパティ
CoddyのC#ジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 10/70。
自動実装プロパティを使用すると、明示的なバッキングフィールドを記述することなくプロパティを宣言できます。コンパイラは、バックグラウンドで自動的に隠しプライベートフィールドを作成します。
このように冗長なコードを書く代わりに:
public class Product
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}単に次のように記述できます:
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
public int Quantity { get; set; }
}また、宣言内で直接デフォルト値を設定することもできます。
public class Product
{
public string Name { get; set; } = "Unnamed";
public decimal Price { get; set; } = 0.0m;
public bool IsAvailable { get; set; } = true;
}自動実装プロパティは、ゲッターやセッターにバリデーションやカスタムロジックが必要ない場合に理想的です。これらを使用することで、クラスをクリーンに保ち、ボイラープレートコードを大幅に削減できます。
チャレンジ
簡単店舗のアイテムを追跡するために、自動実装プロパティを使用してシンプルな在庫管理システムを構築しましょう。
コードを整理するために、2つのファイルを作成します:
Item.cs:Inventory名前空間内にItemクラスを定義し、Name(string)、Price(decimal)、およびInStock(bool) の自動実装プロパティを作成します。デフォルト値を設定してください:Nameは"Unknown"、Priceは0.0m、InStockはtrueとします。Program.cs: メインファイルで、オブジェクト初期化子を使用して2つのItemオブジェクトを作成します。入力から各アイテムの名前と価格を読み取り、各アイテムの詳細を出力してください。
4つの入力を受け取ります:
- 1つ目のアイテムの名前
- 1つ目のアイテムの価格
- 2つ目のアイテムの名前
- 2つ目のアイテムの価格
各アイテムを次の形式で出力してください:
Item: {Name}, Price: {Price}, In Stock: {InStock}例えば、入力が Laptop、999.99、Mouse、25.50 の場合、出力は次のようになります:
Item: Laptop, Price: 999.99, In Stock: True
Item: Mouse, Price: 25.50, In Stock: Trueチートシート
自動実装プロパティを使用すると、明示的なバッキングフィールドを記述することなくプロパティを宣言できます。コンパイラは、隠しプライベートフィールドを自動的に作成します。
基本的な構文:
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
public int Quantity { get; set; }
}デフォルト値の設定:
public class Product
{
public string Name { get; set; } = "Unnamed";
public decimal Price { get; set; } = 0.0m;
public bool IsAvailable { get; set; } = true;
}自動実装プロパティは、getterやsetterにバリデーションやカスタムロジックが必要ない場合に最適です。
自分で試してみよう
using System;
using Inventory;
class Program
{
public static void Main(string[] args)
{
// 1つ目のアイテムの入力を読み込む
string name1 = Console.ReadLine();
decimal price1 = Convert.ToDecimal(Console.ReadLine());
// 2つ目のアイテムの入力を読み込む
string name2 = Console.ReadLine();
decimal price2 = Convert.ToDecimal(Console.ReadLine());
// TODO: オブジェクト初期化子を使用して2つの Item オブジェクトを作成する
// 入力値から Name プロパティと Price プロパティを設定する
// TODO: 各アイテムの詳細を次の形式で出力する:
// Item: {Name}, Price: {Price}, In Stock: {InStock}
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。