C#中静态嵌套类中类似于Java的非静态变量的替代方法

时间:2018-10-30 17:54:39

标签: c# class static nested

我正试图在C#中重新创建我在《有效Java》一书中找到的这种优雅的构建器模式,但我不是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; 
        }
}

使用此构建器,您可以像这样创建NutritionFacts对象,并逐一提供构造函数参数:

NutritionFacts cocaCola = new NutritionFacts.Builder(). calories(100).sodium(35).carbohydrate(27).build();

但是,似乎在C#中,静态嵌套类中不允许使用非静态参数。那么,如何将其转换为C#?

谢谢。

1 个答案:

答案 0 :(得分:-3)

一种解决方案是将Builder类拉到NutritionFacts类之外。您也可以将名称更改为NutritionFacstBuilder