You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不新建类的情况下以类似命名空间结构分离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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 22:00:08