为什么Bloch的Builder Pattern不能在C#中工作

cdm*_*kay 11 .net c# java design-patterns builder

考虑一下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;
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您尝试运行此命令,C#编译器将抱怨它无权访问Builder的私有属性.但是,在Java中,您可以这样做.C#中有哪些规则阻止您访问嵌套类的私有属性?

(我意识到人们已经在这里提供了替代方案,这很好.我感兴趣的是为什么你不能不经过修改就使用Java模式).

Lau*_*ves 18

在Java中,包含类的内部/嵌套类的私有成员可以访问.在C#中他们不是.