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

C#中存在重复方法时,如何规整数据类声明?

优化角色技能声明的整洁方案

嘿,我完全懂你现在的烦恼——当你要维护一个需要存储大量数据的类时,一不小心就会让它变得臃肿又杂乱,每次加新属性或方法都像在给一个已经塞满东西的抽屉硬塞新物件。针对你角色技能的声明问题,这里有几个能让代码更整洁、更易维护的方案:

1. 构建者模式(Builder Pattern)

这是处理复杂对象配置的经典方案,能把角色的技能配置逻辑从客户端代码中抽离出来,实现链式调用的流畅写法:

public class CharacterBuilder
{
    private readonly Character _character = new Character();

    public CharacterBuilder WithOneHandedSkill()
    {
        _character.Skills.Add(Skill.OneHanded());
        return this;
    }

    public CharacterBuilder WithShieldSkill()
    {
        _character.Skills.Add(Skill.Shield());
        return this;
    }

    // 后续新增技能时,只需要在这里添加对应的配置方法即可
    public CharacterBuilder WithArcherySkill()
    {
        _character.Skills.Add(Skill.Archery());
        return this;
    }

    public Character Build()
    {
        return _character;
    }
}

// 客户端使用示例
var character = new CharacterBuilder()
    .WithOneHandedSkill()
    .WithShieldSkill()
    .Build();

优势:代码可读性极强,配置逻辑集中在Builder类中,原Character类无需频繁新增方法,后续扩展技能组合也非常灵活。

2. 静态工厂方法+集合初始化器

如果你的游戏里有固定的职业/技能组合(比如战士、法师等),可以给Character类添加静态工厂方法,封装常用的技能配置:

public class Character
{
    public List<Skill> Skills { get; } = new List<Skill>();

    // 可选:添加接受技能集合的构造函数,简化初始化
    public Character(IEnumerable<Skill> skills)
    {
        Skills.AddRange(skills);
    }

    // 封装固定技能组合的静态工厂方法
    public static Character CreateWarrior()
    {
        return new Character(new List<Skill>
        {
            Skill.OneHanded(),
            Skill.Shield()
        });
    }

    public static Character CreateMage()
    {
        return new Character(new List<Skill>
        {
            Skill.FireMagic(),
            Skill.IceMagic()
        });
    }
}

// 客户端使用示例
// 方式1:直接用构造函数+集合初始化
var customCharacter = new Character(new List<Skill> { Skill.OneHanded(), Skill.Shield() });

// 方式2:调用预定义的工厂方法
var warrior = Character.CreateWarrior();

优势:固定角色的创建一行代码就能完成,Character类的职责更单一,不用处理零散的技能添加逻辑。

3. 扩展方法(无侵入式扩展)

如果不想修改现有的Character类(比如它是第三方库的类,或者你不想改动原有代码结构),可以用扩展方法来批量添加技能:

public static class CharacterExtensions
{
    public static Character AddWarriorSkills(this Character character)
    {
        character.Skills.Add(Skill.OneHanded());
        character.Skills.Add(Skill.Shield());
        return character;
    }

    public static Character AddRangerSkills(this Character character)
    {
        character.Skills.Add(Skill.Archery());
        character.Skills.Add(Skill.Tracking());
        return character;
    }
}

// 客户端使用示例
var character = new Character().AddWarriorSkills();

优势:对原有代码零侵入,能快速扩展新的技能组合,适合已有代码的增量优化。


内容的提问来源于stack exchange,提问作者Zarwalski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:06:52