C# C语言中指定委托变量的语法#

C# C语言中指定委托变量的语法#,c#,C#,我在这里查看了有关委托的多个问题,我认为我的语法正确,但Visual 2012抛出了一个错误:myMethod在当前上下文中不存在 class Class1 { public delegate void DoSomething(List<dynamic> input); List<dynamic> myData = new List<dynamic>(); Delegate myMethod; public void Ass

我在这里查看了有关委托的多个问题,我认为我的语法正确,但Visual 2012抛出了一个错误:myMethod在当前上下文中不存在

class Class1
{
    public delegate void DoSomething(List<dynamic> input);

    List<dynamic> myData = new List<dynamic>();
    Delegate myMethod;

    public void AssignData(List<dynamic> input)
    {
        myData.Clear();
        myData.AddRange(input);
    }

    public void AssignFunction(DoSomething method)
    {
        myMethod = method;
    }

    public void CheckDel()
    {
        myMethod(myData);
    }
}
Class1类
{
公共代表无效剂量(列表输入);
List myData=new List();
委托方式;
公共数据(列表输入)
{
myData.Clear();
myData.AddRange(输入);
}
公共功能(剂量测定法)
{
myMethod=方法;
}
公共void CheckDel()
{
myMethod(myData);
}
}
}

以下是调用代码,似乎工作正常:

private void Form1_Load(object sender, EventArgs e)
    {
        List<dynamic> test = new List<dynamic>();
        test.Add(1);
        test.Add(2);
        test.Add(3);

        myClass.AssignData(test);
        myClass.AssignFunction(callBack);
        myClass.CheckDel();
    }
    public void callBack(List<dynamic> input)
    {

        MessageBox.Show(input[0].ToString());
    }
private void Form1\u加载(对象发送方,事件参数e)
{
列表测试=新列表();
测试。添加(1);
测试。添加(2);
测试。添加(3);
myClass.AssignData(测试);
赋值函数(回调);
myClass.CheckDel();
}
公共无效回调(列表输入)
{
MessageBox.Show(输入[0].ToString());
}

除了CheckDel函数返回上述错误外,其他所有操作似乎都正常。我希望能够使用AssignFunction随时分配方法。然后Class1可以使用CheckDel方法调用该方法。

当您的委托声明为普通的旧
委托
对象时,您必须通过调用DynamicInvoke方法来调用它

//Delegate myMethod;
DoSomething myMethod;
myMethod.DynamicInvoke(myData)

出于性能原因,最好将委托声明为所需的特定类型。i、 e.代替
委托myMethod
,您知道这是一种
DoSomething
,所以请使用
DoSomething-myMethod

把它看作是声明的类似物

对象myObjectvs<代码>1类对象
——您需要将第一个函数强制转换为
Class1
,以便在其上调用任何
Class1
方法

实际上,您可以将
myMethod
转换为键入
DoSomething
,它将按预期工作:

((剂量测定法)myMethod)(myData)

为什么
委托我的方法和非
剂量测定法?这很有效,但为什么?因为。。。这不是很明显吗?不,不是。请把它包括在你的答案中。如果有人要问,这并不明显。非常感谢。(卡梅伦也是如此)。我只是从普通的C迁移到C#,并且仍然能够使用对象。你的解释很有道理。您还应该研究泛型,而不是动态的。它将为您提供强大的键入功能,同时仍然允许您重用代码。它类似于C++模板。