c# - 公共方法在另一个类中不可见
问题描述
我正在尝试在我正在编写的游戏中实现 GameStateManager。
在我的主要形式中,我有一个标签,我试图从某个游戏状态中更改文本。
因为我不想将标签更改为公开,这是不好的做法,所以我做了以下事情:
public void ChangeScoreLabel(string text)
{
this.lblScore.Text = text;
}
我使用以下代码将主窗体传递给我的班级:
gameStateManager.Add("game", new CStateGame(gameStateManager, this));
在构造函数的游戏类中,我将其传递给:
public CStateGame(CStateManager gameStateManager, Form form)
{
m_gameStateManager = gameStateManager;
m_form = form;
}
现在这不起作用:
m_form.ChangeScoreLabel("Score : " + iScore.ToString());
我错过了什么?
解决方案
的类型m_form
必须是您的具体形式。例如,MyForm m_form;
代替Form m_form;
. 方法参数也是如此:
public CStateGame(CStateManager gameStateManager, MyForm form)
您的表单是一个派生自Form
. 但是由于Form
没有声明ChangeScoreLabel
,这个方法通过变量或类型的属性是不可见的Form
。
如果无法更改类型(例如,因为方法参数、变量或属性不在您的控制之下),那么您必须强制转换为您的表单类型。
((MyForm)m_form).ChangeScoreLabel("Score : " + iScore.ToString());
或者,更安全
if (m_form is MyForm myForm) {
myForm.ChangeScoreLabel("Score : " + iScore.ToString());
}
推荐阅读
- javascript - 更改标签 href 取决于 window.location.href
- python - 大查询 | 蟒蛇 | 从 BigQuery 表 VIEW 中导出数据
- python - 使用我当前的脚本绘制 Y 误差线
- ios - react-native IOS 发布方案上的 Travis 错误
- python - 在 selenium driver.close() 中关闭所有选项卡,我只想关闭当前选项卡
- php - 在多个 PHP-FPM 实例之间共享 Opcache
- python - 如何根据列值将数据拆分为训练和测试并打乱组合?
- python - ImportError:找不到“cudnn64_7.dll”
- jenkins - Jenkins 的流水线文件参数
- c# - 使用 DoubleBuffering 和 FormBorderStyle.None 在 Windows10 上重绘问题