gpt4 book ai didi

c# - 如何限制哪些类可以更改另一个非相关类中字段的值

转载 作者:行者123 更新时间:2023-11-30 14:26:49 25 4
gpt4 key购买 nike

作为视频游戏的一部分,我需要存储玩家资料。

如果我有一个像这样的 Player 类:

public class Player
{
public string username { get; private set; }
public int numberOfWins { get; private set; }

public void AddWin()
{
numberOfWins++;
}
}

还有一个像这样的游戏类:

public class Game
{
Player playerOne;
Player playerTwo;

int playerOneScore;
int playerTwoScore;

public void HandleGameEnd()
{
if (playerOneScore > playerTwoScore)
{
playerOne.AddWin();
}

else
{
playerTwo.AddWin();
}
}
}

我将如何更改我的代码以确保唯一使用 AddWin() 的是 HandleGameEnd()

最佳答案

你应该创建一个接口(interface),例如

interface ICanAddWin
{
void AddWin();
}

然后在你的播放器中明确地实现它:

class Player : ICanAddWin
{
void ICanAddWin.AddWin() { ... }
}

Game 应该使用 ICanAddWin 对象,而不是 Player(如果需要,您可以添加更多方法)。其他类不知道 AddWin 方法,除非它们将 Player 转换为内部接口(interface) ICanAddWin,这要求它们在同一个程序集中并添加为该接口(interface)命名空间使用(实际上,在更好的设计中,每个“客户端”应该只看到它需要的一些特定接口(interface),而不是 Player 类;转换是一种不好的做法)。

AddWin 方法移动到一个单独的类(可能是私有(private)的,嵌套在 Player 中以访问其私有(private)字段)会更好,该类实现了 ICanAddWin。这样,当您在某处传递 Player 时,您绝对可以确定它不会被转换为 ICanAddWin

为了更好地理解,我建议您学习更多 OOP 和 SOLID(尤其是接口(interface)隔离和依赖倒置部分)。

关于c# - 如何限制哪些类可以更改另一个非相关类中字段的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34474949/

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