如何在不新建类的情况下以类似命名空间结构分离Weapon类字段?
实现类似命名空间的字段访问(不创建新类)
可以实现,你不需要创建新的顶级类,只需要在Weapon类内部定义嵌套结构体(结构体不属于类,满足你的要求),把原有分组字段封装进去,再通过类的实例属性暴露这些结构体即可。
修改后的代码示例
public class Weapon { // 嵌套结构体:封装默认设置(结构体不是类,符合要求) public struct DefaultGroup { public float[] Energy; public UltEvent<Weapon>[] Callbacks; public MotionType[] Motions; } // 嵌套结构体:封装特殊设置 public struct SpecialGroup { public float[] Energy; public UltEvent<Weapon>[] Callbacks; public MotionType[] Motions; } // 暴露默认设置的实例,用@default转义C#关键字 public DefaultGroup @default; // 暴露特殊设置的实例 public SpecialGroup special; }
访问方式
现在你可以用想要的语法访问:
// 访问默认能量 var energy = weapon.@default.Energy[i]; // 调用特殊回调 weapon.special.Callbacks[i].Invoke(weapon);
兼容旧代码(可选)
如果需要保留原有的defaultEnergy等字段访问方式,避免旧代码报错,可以添加兼容属性:
public class Weapon { // ... 上面的嵌套结构体和实例 ... // 兼容旧的defaultEnergy访问 public float[] defaultEnergy { get => @default.Energy; set => @default.Energy = value; } public UltEvent<Weapon>[] defaultCallbacks { get => @default.Callbacks; set => @default.Callbacks = value; } public MotionType[] defaultMotions { get => @default.Motions; set => @default.Motions = value; } // 同理添加special相关的兼容属性 }
说明
- 这里用的嵌套结构体是值类型,不属于类,完全符合你“不创建新类”的要求。
- 结构体内部的数组是引用类型,所以修改
weapon.@default.Energy的元素时,操作的是原数组的引用,不会出现值类型副本的问题。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

