Unity环境下C#8.0中Stat类支持int/float参数构造的实现
解决方案
核心思路是通过静态工厂方法或隐式类型转换,在不使用多构造函数的前提下,让Stat类支持int和float两种参数输入,同时保证能统一存入Dictionary<string, Stat>集合。
方案一:静态工厂方法(语义清晰,推荐)
通过静态方法封装实例创建逻辑,避免暴露多个构造函数,同时明确区分不同类型的输入:
public class Stat { // 用float统一存储数值,兼顾int和float的精度需求 private float _baseValue; // 升级相关字段,可按需调整 private int _currentLevel; private float _growthRate; // 唯一私有构造函数,外部只能通过工厂方法创建实例 private Stat(float baseValue) { _baseValue = baseValue; _currentLevel = 1; _growthRate = 0.1f; // 默认成长率 } // 创建int类型的Stat实例 public static Stat FromInt(int value) { return new Stat(value); } // 创建float类型的Stat实例 public static Stat FromFloat(float value) { return new Stat(value); } // 升级统计算法 public void Upgrade() { _currentLevel++; _baseValue *= (1 + _growthRate); // 可扩展自定义逻辑:比如等级上限、成长衰减等 } // 重置统计算法 public void Reset(float initialValue) { _currentLevel = 1; _baseValue = initialValue; // 重置其他关联状态 } // 获取当前统计值 public float GetCurrentValue() { return _baseValue; } }
初始化字典的写法:
var stats = new Dictionary<string, Stat> { {"health", Stat.FromInt(30)}, {"attack", Stat.FromFloat(2.5f)} };
方案二:隐式类型转换(写法更简洁)
通过添加隐式转换规则,让int/float可以直接赋值给Stat类型,写法更接近你的预期:
public class Stat { private float _baseValue; private int _currentLevel; private float _growthRate; // 唯一构造函数,接收float类型参数 public Stat(float baseValue) { _baseValue = baseValue; _currentLevel = 1; _growthRate = 0.1f; } // 隐式转换:int自动转为Stat public static implicit operator Stat(int value) { return new Stat(value); } // 隐式转换:float自动转为Stat public static implicit operator Stat(float value) { return new Stat(value); } // 升级方法 public void Upgrade() { _currentLevel++; _baseValue *= (1 + _growthRate); } // 重置方法 public void Reset(float initialValue) { _currentLevel = 1; _baseValue = initialValue; } public float GetCurrentValue() { return _baseValue; } }
初始化字典的写法:
var stats = new Dictionary<string, Stat> { {"health", 30}, // 自动转换为Stat实例 {"attack", 2.5f} // 自动转换为Stat实例 };
性能说明
两种方案都能保障性能:
- 实例创建均为直接内存分配,无额外开销
Dictionary存储引用类型,查找、访问效率与普通字典一致- 内部用
float统一存储数值,避免了频繁类型转换的消耗,同时兼容两种输入类型
内容的提问来源于stack exchange,提问作者Caino
相关产品推荐
相关产品推荐

