c#、.net、委托、异步回调。我做错了什么?

c#、.net、委托、异步回调。我做错了什么?,c#,.net,delegates,C#,.net,Delegates,这里有一个小类,用于游戏菜单中的按钮 我希望在实例化每个按钮时能够传递一个委托方法\u triggerMethod。然后,当调用按钮实例触发器方法时,将调用该委托方法 我第一次在这里试用C#中的代表。就我解释文档而言,我所做的应该是可行的,但是VisualStudio在触发器方法中给了我一个编译错误 根据msdn文章,调用委托的代码不需要知道原始方法参数等。我做错了什么? 在msdn的文章中,他们只输入了“Del”,这对我来说并不适用。我必须键入“Delegate”,这是一个奇怪的字符 clas

这里有一个小类,用于游戏菜单中的按钮

我希望在实例化每个按钮时能够传递一个委托方法\u triggerMethod。然后,当调用按钮实例触发器方法时,将调用该委托方法

我第一次在这里试用C#中的代表。就我解释文档而言,我所做的应该是可行的,但是VisualStudio在触发器方法中给了我一个编译错误

根据msdn文章,调用委托的代码不需要知道原始方法参数等。我做错了什么? 在msdn的文章中,他们只输入了“Del”,这对我来说并不适用。我必须键入“Delegate”,这是一个奇怪的字符

class MenuItem
    {
        private Rectangle clickArea;
        private string displayText;
        private Vector2 _position;
        private Delegate _triggerMethod;

        public MenuItem(Vector2 pos,string txt,Delegate trig)
        {
            displayText = txt;
            _position = pos;
            _triggerMethod = trig;
        }

        public void Draw(SpriteBatch sb)
        {
        }

        public void Select()
        {
        }

        public void DeSelect()
        {
        }

        public void IsMouseOnMe()
        {
        }

        public void Trigger()
        {
            _triggerMethod();
        }
    }

如果要使用
Del
类型,则需要定义该类型:

public delegate void Del(string message);

public class MenuItem
{
    private Del _triggerMethod;
    public void Trigger()
    {
        _triggerMethod("Message");
    }
}
请注意,您可以使用内置的
操作
委托类型,而不是定义自己的委托类型:

Action<string> _triggerMethod;
_triggerMethod("Message");

如果要使用
Del
类型,则需要定义该类型:

public delegate void Del(string message);

public class MenuItem
{
    private Del _triggerMethod;
    public void Trigger()
    {
        _triggerMethod("Message");
    }
}
请注意,您可以使用内置的
操作
委托类型,而不是定义自己的委托类型:

Action<string> _triggerMethod;
_triggerMethod("Message");

您尚未创建任何委托定义

示例(来自您链接的MSDN页面):

然后,您需要将其用作您的类型:

    ** snip **
    private Del _triggerMethod;

    public MenuItem(Vector2 pos,string txt,Del trig)
    {
        displayText = txt;
        _position = pos;
        _triggerMethod = trig;
    }
    ** snip **

    public void Trigger()
    {
        _triggerMethod("some message");
    }

您可以传递委托的引用,而不知道它需要什么参数(因为它只是一个普通的引用),但是当您想要调用它时,您确实需要为它提供正确的参数。

您还没有创建任何委托定义

示例(来自您链接的MSDN页面):

然后,您需要将其用作您的类型:

    ** snip **
    private Del _triggerMethod;

    public MenuItem(Vector2 pos,string txt,Del trig)
    {
        displayText = txt;
        _position = pos;
        _triggerMethod = trig;
    }
    ** snip **

    public void Trigger()
    {
        _triggerMethod("some message");
    }

您可以传递委托的引用,而不知道它需要什么参数(因为它只是一个普通的引用),但是当您想要调用它时,您确实需要为它提供正确的参数。

“需要方法、委托或事件”。。特别是在这里_triggerMethod();此外,当我尝试调试它时,我得到的名称“TriggerMethod”在当前上下文“预期的方法、委托或事件”中不存在。。特别是在这里_triggerMethod();此外,当我尝试调试它时,我得到的名称“TriggerMethod”在当前上下文中不存在