在 C# 中更改属性的输入值后,如何更新属性的值?



我有一个具有以下属性的接口IHasCooldown

int Id { get; }
float CooldownDuration { get; } 

在另一个类(让我们称之为Attack(中,我将Id设置为atkId,将CooldownDuration设置为attackCooldownattackCooldown是一个属性,因此它可以更改。

public float attackCooldown { get; set; }
int atkId = 2;
public int Id => atkId;
public float CooldownDuration => attackCooldown;

最后,在SubAttack类中,我将attackCooldown设置为10。但由于CooldownDuration是在开始时设置的,因此不会计算之后的任何更改。

此外,lambda运算符对我来说还有点麻烦。。这部分是从教程中得到的。

我很想听听关于如何解决这个问题的一些想法!

我得到的冷却系统是从这里开始的,但由于它不考虑可变时间,我对它进行了一点调整。https://www.youtube.com/watch?v=2zGvt4NnIYw

根据您的描述,代码应该是:

class Program
{
static void Main(string[] args)
{
var subAttack = new SubAttack();
Console.WriteLine("Please Input CooldownDuration:");
var input = int.Parse(Console.ReadLine());
subAttack.PrintAttackCooldown();
subAttack.PrintAttackCooldown(input);
Console.ReadKey();
}

}
interface IHasCooldown
{
int Id { get; }
float CooldownDuration { get; }
}
class Attack : IHasCooldown
{
public float attackCooldown { get; set; }
int atkId = 2;
public int Id => atkId;
public float CooldownDuration => attackCooldown;
}
class SubAttack : Attack
{
public void PrintAttackCooldown()
{
Console.WriteLine($"CooldownDuration is {CooldownDuration}");
}
public void PrintAttackCooldown(int cooldown)
{
attackCooldown = cooldown;
Console.WriteLine($"You Input CooldownDuration is {CooldownDuration}");
}
}

输出为:

Please Input CooldownDuration:
9
CooldownDuration is 0
You Input CooldownDuration is 9

因此,在SubAttack上设置attakCooldown应该是有效的,每次使用CooldownDuration都会计算最新的值。

顺便说一下:

public float CooldownDuration => attackCooldown equals public float CooldownDuration { get { return attackCooldown; } }

您的

public float CooldownDuration => attackCooldown;

属性。如果没有lambda表达式,您也可以将其写成

public float CooldownDuration
{
get { return attackCooldown; }
}

这不是设置一次,而是始终返回attackCooldown的当前值


注意,由于attackCooldown也是publicget; set,因此它是完全冗余的。你也可以把它做成

public float CooldownDuration { get; set; }

并使用它。接口只定义了属性的最小要求,但也允许为其提供一个setter,即使接口不需要它。

如果只有你的班级能够写信给它,你也可以让它成为

public float CooldownDuration { get; private set; }

或者如果也允许子类设置值

public float CooldownDuration { get; protected set; }

相关内容

  • 没有找到相关文章

最新更新