Bloch の Builder パターン (C# の構文に変更を加えたもの) のそのままのコピーを検討してください。
public class NutritionFacts
{
public int ServingSize { get; private set; }
public int Servings { get; private set; }
public int Calories { get; private set; }
...
public class Builder
{
private int ServingSize { get; set; }
private int Servings { get; set; }
private int Calories { get; set; }
public Builder(int servingSize, int servings)
{
ServingSize = servingSize;
Servings = servings;
}
public Builder Calories(int calories)
{ Calories = calories; return this; }
public NutritionFacts Build()
{
return new NutritionFacts(this);
}
}
private NuitritionFacts(Builder builder)
{
ServingSize = builder.ServingSize;
Servings = builder.Servings;
Calories = builder.Calories;
}
}
これを実行しようとすると、C# コンパイラは、Builder のプライベート プロパティにアクセスする権限がないことを訴えます。ただし、Java ではこれを行うことができます。入れ子になったクラスのプライベート プロパティにアクセスできないようにする C# の違いは何ですか?
(私は、人々がここで代替案を提供していることを理解しています。それは素晴らしいことです。私が興味を持っているのは、修正なしでは Java パターンを使用できない理由です)。