プライベートクラスが地味に便利

最近、プライベートなクラスを利用することが増えてきました。
たとえば、あるメソッドで複数の値を返したいというような時に便利です。

class Hoge
{
	private class ItemData
	{
		public string ItemName { get; set; }
		public int UnitPrice { get; set; }
	}
	public ItemData GetItemData(string code) {
		return new ItemData { ItemName = "aaa", UnitPrice = 100; }
	}
}

クラスが肥大化したときに処理を階層化する場合も便利です。

class Hoge
{
	private class Piyo {
		// メンバの宣言
	}
	private class Fuga {
		// メンバの宣言
	}
	public void Execute() {
		var piyo = new Piyo();
		var fuga = new Fuga();
		// 処理の実装
	}
}

後で、汎用化してライブラリーにする場合にも、プライベートクラスをベースに汎用化して、互換性の部分を元のプライベートクラスで対応するということもできます。

class Hoge
{
	private class Piyo : PiyoPiyo {
		// 汎用化された Piyo クラスを継承して互換性を保つ
	}
	private class Fuga {
		// メンバの宣言
	}
	public void Execute() {
		var piyo = new Piyo(); // ここは何も変えない
		var fuga = new Fuga();
		// 処理の実装
	}
}

class PiyoPiyo
{
	// 汎用化された Piyo クラス
}

そんな訳で、プライベートクラスによる階層化が今のブームです。