与C#事件抗争示例
我正在努力将一些事件实现到我正在编写的一些代码中,我正在编写的教科书中提供的示例没有编译(C#玩家手册,第三版)。我一直在试图找出我对事件/事件处理程序等不了解的地方,但没有结果 我使用的是Microsoft Visual Studio(最新更新),这是我正在尝试使用的代码(我没有编写它,但我认为找出它不起作用的原因将有助于解决我遇到的其他事件问题) 问题是在线与C#事件抗争示例,c#,C#,我正在努力将一些事件实现到我正在编写的一些代码中,我正在编写的教科书中提供的示例没有编译(C#玩家手册,第三版)。我一直在试图找出我对事件/事件处理程序等不了解的地方,但没有结果 我使用的是Microsoft Visual Studio(最新更新),这是我正在尝试使用的代码(我没有编写它,但我认为找出它不起作用的原因将有助于解决我遇到的其他事件问题) 问题是在线 point.PointChanged += HandlePointChanged; 我收到错误“名称HandlePointChang
point.PointChanged += HandlePointChanged;
我收到错误“名称HandlePointChanged在此上下文中不存在。”
我错过了什么明显的东西吗?为什么这样不行
提前谢谢 HandlePointChanged未在类
程序中定义,您正试图在该类中分配它。它是用点定义的
如果要处理对Program类中函数中某个点的更改,只需将其移动:
namespace EventsPractice
{
class Program
{
static void Main(string[] args)
{
Point point = new Point();
point.PointChanged += HandlePointChanged;
}
static public void HandlePointChanged(object sender, EventArgs eventArgs)
{
// Do something Here
}
}
class Point
{
private double x;
private double y;
public double X
{
get { return x; }
set
{
x = value;
OnPointChanged();
}
}
public double Y
{
get { return y; }
set
{
y = value;
OnPointChanged();
}
}
public event EventHandler PointChanged;
public void OnPointChanged()
{
if (PointChanged != null)
PointChanged(this, EventArgs.Empty);
}
}
}
HandlePointChanged
在类点中定义。您也需要在右侧引用它,因为您是从classProgram
引用它的
point.PointChanged += point.HandlePointChanged;
正如@juharr提到的,您需要引用函数的特定实例,因为它不是静态的。您可以通过使函数保持静态来避免这种情况。将HandlePointChanged()
方法移动到程序中。HandlePointChanged
在点
类中没有意义,它需要在consumer类中。这不是事件问题。这是一个范围问题。该方法存在于点
类的实例上。所以你可以做point.PointChanged+=point.HandlePointChanged但是把它移出课堂会更有意义。非常感谢!这更有意义。它不是静态的,所以你必须从一个实例引用它。@juharr我修复了它。哇,这真是一个简单的修复!非常感谢。
point.PointChanged += point.HandlePointChanged;