I am trying to recreate in C# this elegant builder pattern that I found in the book "Efective Java", but I am not expert in C#.
// Builder Pattern
public class NutritionFacts {
private final int calories;
private final int fat;
private final int sodium;
private final int carbohydrate;
public static class Builder {
// Optional parameters - initialized to default values
private int calories = 0;
private int fat = 0;
private int carbohydrate = 0;
private int sodium = 0;
public Builder();
public Builder calories(int val) { calories = val; return this; }
public Builder fat(int val) { fat = val; return this; }
public Builder carbohydrate(int val) { carbohydrate = val; return this;}
public Builder sodium(int val) { sodium = val; return this; }
public NutritionFacts build() {
return new NutritionFacts(this);
}
}
private NutritionFacts(Builder builder) {
calories = builder.calories;
fat = builder.fat;
sodium = builder.sodium;
carbohydrate = builder.carbohydrate;
}
}
With this Builder you can create the NutritionFacts object like this, providing the constructor parameters one by one:
NutritionFacts cocaCola = new NutritionFacts.Builder(). calories(100).sodium(35).carbohydrate(27).build();
However seems that in C# non-static parameters are not allowed in a static nested class. So, how could I translate this to C#?
Thanks in advance.