c# - 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# 呢?
提前致谢。
解决方案
一种解决方案是将课程拉到Builder
课程之外NutritionFacts
。您也可以将名称更改为NutritionFacstBuilder
.
推荐阅读
- pentaho - 将表作为变量传递 - Pentaho
- sql - oracle 11g 上出现 ORA-00979 的原因是什么
- java - com.mysql.cj.exceptions.DataConversionException:无法从字符串“”确定值类型
- recursion - 如何在 OCaml 中将浮点数提高到指数?
- r - 在 R markdown 中保持添加的图像位置
- ios - 升级到反应原生 0.59.10 后无法加载包 (ios)
- gcc - gcc 错过了“隐藏的重载虚函数”警告
- python - 从python中的字典中删除一些固定数量的键的快速方法?
- ocaml - 如何在 OCaml 中解释此 GADT 错误?
- javascript - 发射成功后如何监听新消息(nodejs上的socket.io)?