寻求有关使活动发挥作用的建议
本文关键字:作用 活动 | 更新日期: 2024-10-25 18:32:31
我正在寻找一些帮助来理解事件。 我一直在阅读有关它们的文章并观看教程视频。
我几乎理解他们,但我不断遇到障碍。
我为自己制作了一个简单的WinForms测试应用程序来尝试学习该过程。 在应用程序中,有2个行走的精灵在屏幕上奔跑。当你点击表单时,它会创建一个下落的精灵(并创建一个事件),步行者精灵应该通过选择一条远离精灵的新步行道来对事件做出反应。 我认为我已经正确编写了所有内容,但是当我编译它时,我收到错误:
错误 1 可访问性不一致:参数类型"eventStomper.RunEventArgs"比委托"eventStomper.RunInFear
"更难访问 错误 2 可访问性不一致:参数类型"eventStomper.RunEventArgs"的可访问性低于方法"eventStomper.Walker.RunAway(object, eventStomper.RunEventArgs)"
我不知所措,因为一切都是公开的。 关于那里错误的任何建议? 而且,关于事件处理有什么建议吗?
以下是源代码,仅归结为相关位:
namespace eventStomper
{
public delegate void RunInFear(object sender, RunEventArgs re); //The delegate for responding to events.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
spawnWalkers(); //Create a couple of walkers to roam around the form
}
List<Thwomp> thowmpList = new List<Thwomp>(); //List of thwomps. This is iterated through for animation.
List<Walker> walkerList = new List<Walker>();// Same thing with the walkers.
public void pictureBox1_Click(object sender, EventArgs e) //When you click on the background, it spawns a thwomp
{
Point _spawnPoint = this.PointToClient(Cursor.Position);
Thwomp _thwomp = new Thwomp(_spawnPoint, sprite ); //Generate a new Thwomp
thowmpList.Add(_thwomp); //Add it to the list of Thwomps
_thwomp.TimeToRun += walkerList[0].RunAway; //Register with the two walkers roaming around.
_thwomp.TimeToRun += walkerList[1].RunAway;
//Do other things to setup the thwomp sprite
}
}
public class Thwomp
{
public int spriteX = 0;//Current sprite location
public int spriteY = 0;
public int targetX = 0;//Where the thwomp will land.
public int targetY = 0;
public event RunInFear TimeToRun;
public void Animate()
{
//Do Animation steps.
}
public Thwomp(Point spawnPoint, PictureBox spriteIncoming)
{
RunEventArgs re = new RunEventArgs();
re._pointOfFear = spawnPoint;
//Setup thwomp sprite
TimeToRun(this, re); //Trigger the event.
}
}
public class Walker
{
public int spriteX = 0; //Current sprite location
public int spriteY = 0;
public Walker(Point spawnPoint, PictureBox spriteIncoming)
{
//Create the walker
}
public void RunAway(Point dangerPoint)
{
if (Math.Abs(sprite.Top - dangerPoint.Y) < 20 && Math.Abs(sprite.Left - dangerPoint.X) < 20) //If near a newly created thwomp, run away.
{
//Pick a path headed away from the danger.
}
}
public void Animate()
{
//Move the walker away.
}
}
class RunEventArgs : EventArgs
{
public Point _pointOfFear;
}
}
我不知所措,因为一切都是公开的。
差一点。正如错误消息所说:
参数类型 'eventStomper.RunEventArgs' 比委托 'eventStomper.RunInFear' 更难访问
根据该消息,RunEventArgs
比RunInFear
更难访问。因此,让我们看一下这两种类型的可访问性级别:
public delegate void RunInFear(object sender, RunEventArgs re);
所以,这是公开的。目前为止,一切都好。
class RunEventArgs : EventArgs
{
public Point _pointOfFear;
}
啊哈!这个没有分配可访问性,这意味着 - 根据文档 - 它将默认为internal
:
未嵌套在其他类型的顶级类型中,只能具有内部或公共可访问性。这些类型的默认辅助功能是内部的。
因此,将该类RunEventArgs
public
,您的代码应编译。