首页 > 解决方案 > C# 中静态嵌套类中非静态变量的类 Java 替代方案

问题描述

我正在尝试在 C# 中重新创建我在“Efective 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; 
        }
}

使用这个 Builder 你可以像这样创建 NutritionFacts 对象,一一提供构造函数参数:

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

但是,在 C# 中,静态嵌套类中似乎不允许使用非静态参数。那么,我怎么能把它翻译成 C# 呢?

提前致谢。

标签: c#classstaticnested

解决方案


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


推荐阅读