与C#事件抗争示例

与C#事件抗争示例,c#,C#,我正在努力将一些事件实现到我正在编写的一些代码中,我正在编写的教科书中提供的示例没有编译(C#玩家手册,第三版)。我一直在试图找出我对事件/事件处理程序等不了解的地方,但没有结果 我使用的是Microsoft Visual Studio(最新更新),这是我正在尝试使用的代码(我没有编写它,但我认为找出它不起作用的原因将有助于解决我遇到的其他事件问题) 问题是在线 point.PointChanged += HandlePointChanged; 我收到错误“名称HandlePointChang

我正在努力将一些事件实现到我正在编写的一些代码中,我正在编写的教科书中提供的示例没有编译(C#玩家手册,第三版)。我一直在试图找出我对事件/事件处理程序等不了解的地方,但没有结果

我使用的是Microsoft Visual Studio(最新更新),这是我正在尝试使用的代码(我没有编写它,但我认为找出它不起作用的原因将有助于解决我遇到的其他事件问题)

问题是在线

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
在类
点中定义。您也需要在右侧引用它,因为您是从class
Program
引用它的

point.PointChanged += point.HandlePointChanged;

正如@juharr提到的,您需要引用函数的特定实例,因为它不是静态的。您可以通过使函数保持静态来避免这种情况。

HandlePointChanged()
方法移动到
程序中。
HandlePointChanged
类中没有意义,它需要在consumer类中。这不是事件问题。这是一个范围问题。该方法存在于
类的实例上。所以你可以做
point.PointChanged+=point.HandlePointChangedpoint.PointChanged += point.HandlePointChanged;