gpt4 book ai didi

c# - 如何概括属性模式

转载 作者:行者123 更新时间:2023-11-30 13:35:40 30 4
gpt4 key购买 nike

我的类具有多个属性,这些属性具有明确定义的名称和功能,但具有相同的实现。例如:

class Stats
{
private int attack;
public int Attack
{
get =>
HasBuff ? attack + 1 : attack;
set
{
if (value < 1 || value > 10)
throw new ArgumentOutOfRangeException("Invalid value");
attack = value;
}
}

public int Defense {...}
public int Speed {...}
}

DefenseSpeed 的实现方式与 Attack 相同。我如何概括此结构以避免冗余并使更改更容易?

最佳答案

创建另一个类来概括统计信息:

public class Stat
{
public bool HasBuff { get; set; }

private int _stat;
public int Score
{
get => HasBuff ? _stat + 1 : _stat;
set => _stat = value;
}
}

然后将其用于您的每项技能:

public class CombatStats
{
public Stat Attack { get; } = new Stat();
public Stat Defense { get; } = new Stat();
public Stat Speed { get; } = new Stat();
}

调用代码如下所示:

var ninja = new Ninja();
ninja.skills = new CombatStats();
var attackStrength = ninja.skills.Attack.Score;

作为进一步的改进,可以使用隐式运算符来避免对象创建和调用 Score:

public class Stat
{
...

public static implicit operator int(Stat stat)
{
return stat.Score;
}

public static implicit operator Stat(int value)
{
return new Stat()
{
Score = value
};
}
}

这使得更改对 w.r.t. 编写的客户端代码透明。问题中的示例:

ninja.skills = new CombatStats(){
Attack = 5,
Defense = 2
}
int attack = ninja.skills.Attack;

关于c# - 如何概括属性模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48856337/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com