C# 在设置活动时遇到问题
在我的课堂上,我们正在学习如何使用c语言中的事件。教授希望我们为我们的机器人玩家状态设置事件。我要做的是,当我改变机器人的状态时,我希望该状态注册到一个事件方法。但我在安排活动时遇到了问题。我得到这些错误 错误1C# 在设置活动时遇到问题,c#,events,C#,Events,在我的课堂上,我们正在学习如何使用c语言中的事件。教授希望我们为我们的机器人玩家状态设置事件。我要做的是,当我改变机器人的状态时,我希望该状态注册到一个事件方法。但我在安排活动时遇到了问题。我得到这些错误 错误1 Operator '+=' cannot be applied to operands of type 'PracticeWithEvents.Program.PlayerActions' and 'method group' 错误2 Cannot convert method gr
Operator '+=' cannot be applied to operands of type 'PracticeWithEvents.Program.PlayerActions' and 'method group'
错误2
Cannot convert method group 'OnIdleState' to non-delegate type 'PracticeWithEvents.Program.PlayerActions'. Did you intend to invoke the method?
我对整个事件的注册相对较新,所以我确信我做得不对。我在网上查了一下,但找不到有同样问题的人。有人能帮我理解我做错了什么吗
这是我的代码,希望有帮助
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PracticeWithEvents
{
class Program
{
/// <summary>
/// Creating the states for the player
/// </summary>
public enum PlayerActions { IDLE, ATTACK, MOVE, DYING }
/// <summary>
/// creating our enum handler
/// </summary>
public static PlayerActions CurrentAction = PlayerActions.IDLE;
static void Main(string[] args)
{
switch (CurrentAction)
{
case PlayerActions.IDLE:
CurrentAction += OnIdleState;
break;
case PlayerActions.ATTACK:
break;
case PlayerActions.MOVE:
break;
case PlayerActions.DYING:
break;
}
}
/// <summary>
/// Logic for the Idle State
/// </summary>
/// <param name="e">gets the event</param>
void OnIdleState(object sender, EventArgs e)
{
Console.WriteLine("IDLE");
}
/// <summary>
/// Logic for the Attack State
/// </summary>
/// <param name="e">gets the event</param>
void OnAttackState(object sender, EventArgs e)
{
Console.WriteLine("ATTACK");
}
/// <summary>
/// Logic for the Move State
/// </summary>
/// <param name="e">gets the event</param>
void OnMoveState(object sender, EventArgs e)
{
Console.WriteLine("MOVE");
}
/// <summary>
/// Logic for the Dying State
/// </summary>
/// <param name="e">gets the event</param>
void OnDyingState(object sender, EventArgs e)
{
Console.WriteLine("DYING");
}
}
}
要发送事件的类必须包含特定类型的事件。事件的类型由您必须在某处定义的某个委托的签名定义 然后,使用您的类或甚至是该类的某个实例的代码将向其附加处理程序。这些处理程序将在事件激发时运行。这是一种控制反转,当您的类的用户告诉它:这里,我希望您在每次触发此事件时运行我交给您的代码。这就是+=语法的来源:您可以将多个处理程序附加到给定实例的事件 最后,根据您的需要,您可以将EventArgs子类化,以便每次触发事件时都可以传递自定义值或参数,以便客户机代码提供处理程序的代码可以获取有关事件的信息。它是什么信息,取决于你的意图 此外,您似乎对动作、事件和状态之间的区别感到困惑。这些就是有限状态机行为的定义。状态机具有有限数量的状态。从一种状态到另一种状态的更改由事件定义。每个状态都有一个或多个事件,当这些事件发生时,会决定性地导致另一个定义良好的状态发生变化。在此基础上,您可以进行输入操作和退出操作。另外,您不需要正式的状态机就可以从基于事件的编程中获益 对于我来说,如何从当前代码到我刚刚编写的代码的一些工作实现有点模糊,但我想你可以理解。如果没有
希望这有帮助。CurrentAction不是一个事件-它只是一个枚举属性。阅读添加事件。提示:步骤1是查找/定义适当的EventArgs类。PlayerActions不是事件,因此您无法订阅它。通常您会有一个类Robot/Player?这将宣布这一事件。然后,主方法将订阅这些事件。您需要创建该Robot/Player类的实例并订阅该实例的事件。与论坛网站不同,我们不使用感谢、感谢的帮助或签名。另外,您认为一旦切换完成,您的代码将执行什么操作?