C# C语言中指定委托变量的语法#
我在这里查看了有关委托的多个问题,我认为我的语法正确,但Visual 2012抛出了一个错误:myMethod在当前上下文中不存在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
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代码>
把它看作是声明的类似物
对象myObject代码>vs<代码>1类对象
——您需要将第一个函数强制转换为Class1
,以便在其上调用任何Class1
方法
实际上,您可以将myMethod
转换为键入DoSomething
,它将按预期工作:
((剂量测定法)myMethod)(myData)代码>为什么委托我的方法代码>和非剂量测定法代码>?这很有效,但为什么?因为。。。这不是很明显吗?不,不是。请把它包括在你的答案中。如果有人要问,这并不明显。非常感谢。(卡梅伦也是如此)。我只是从普通的C迁移到C#,并且仍然能够使用对象。你的解释很有道理。您还应该研究泛型,而不是动态的。它将为您提供强大的键入功能,同时仍然允许您重用代码。它类似于C++模板。