c# - 有没有更好的初始化类的方法?

标签 c# class object

我准备制作某种武器列表,当然对它们进行硬编码,这样如果没有特殊的东西,它们就不能被黑客攻击或修改。我只是想知道是否有更快的方法:

public Firearm(string WeaponName, int WeaponId, float Damage, FireType WeaponFireType, float FireRate, float ReloadTime, int MaxClip, bool InfiniteAmmo)
{
    weaponName = WeaponName;
    weaponID = WeaponId;
    damage = Damage;
    weaponFireType = WeaponFireType;
    fireRate = FireRate;
    reloadTime = ReloadTime;
    maxClip = MaxClip;
    infiniteAmmo = InfiniteAmmo;
}

然后是这个:(这只是一个例子,我不会在实际脚本中这样做。

void InitializeWeapons()
{
    var allFirearms = new List<Firearm>();
    allFirearms.Add(new Firearm(
        "Pistol", 
        0, 12.5f, Firearm.FireType.SemiAutomatic, 
        1.2f, 1.5f, 12, true
        )); 
}

有其他方法可以做到这一点吗?更干净、更容易看到发生了什么的东西?

编辑:有点糟糕,我不能把你们全部作为批准的答案,因为它们都帮助我学习了一些东西等等。我只会选择我决定使用的那个。我将完成代码并批准我使用的代码。

最佳答案

也许可以尝试Fluent Builder pattern ?该模式并非没有缺陷,但它确实使复杂的对象创建更具可读性。 首先你需要添加WeaponBuilder类:

public class WeaponBuilder
{
    private string name;
    private int damage;
    private int fireRate;

    public WeaponBuilder CreateWeapon(string name)
    {
        this.name = name;
        return this;
    }

    public WeaponBuilder WithDamage(int damage)
    {
        this.damage = damage;
        return this;
    }

    public WeaponBuilder WithFireRate(int fireRate)
    {
        this.fireRate = fireRate;
        return this;
    }

    public Weapon Build()
    {
        return new Weapon(name, damage, fireRate);
    }
}

然后你像这样创建你的武器:

    var weapon = new WeaponBuilder()
        .CreateWeapon("AK-47")
        .WithDamage(100)
        .WithFireRate(50)
        .Build();

关于c# - 有没有更好的初始化类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31522366/

相关文章:

c# - App Insights 对 Api 根执行心跳检查

python - 使用类而不是列表 python

java - 抽象类错误简单类

Java 对象的数组列表包含/等于

Ruby - 按值传递

c# - 在 ElasticSearch 中使用 Bulk.IndexMany 指定 _id 字段

c# - 在 C# 中简化设置和部署

C#:嵌套类的构造函数使 "inaccessible due to protection level"

database - db4o 和/或 Eloquera 数据库的真实世界体验

c# - 使用 Open Xml 写入 Excel 在某些列之后出现问题