公共方法在另一个类中不可见
Posted
技术标签:
【中文标题】公共方法在另一个类中不可见【英文标题】:public method not visible in another class 【发布时间】:2021-11-29 15:11:46 【问题描述】:我正在尝试在我正在编写的游戏中实现 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());
我错过了什么?
【问题讨论】:
使用as
将父级 Form
转换为您的真实 Form1
(或您如何称呼它):(m_form as Form1).ChangeScoreLabel("Score : " + iScore.ToString());
【参考方案1】:
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());
【讨论】:
以上是关于公共方法在另一个类中不可见的主要内容,如果未能解决你的问题,请参考以下文章