日期:2014-05-17  浏览次数:20763 次

【初级】这种使用方法叫什么?

//这是三段位置不在一起的代码
public delegate void MyInvoke(string str1,string str2);
//这个东西叫代理函数,最近有了解
MyInvoke mi = new MyInvoke(UpdateForm);
//我想知道这是什么使用方法?有点像指针类型的函数,但是看上去又不像?
public void UpdateForm(string param1,string parm2)
{
this.textBox1.Text = param1+parm2;
}

求助MyInvoke是一个函数指针还是个类?怎么理解第二句话?

------解决方案--------------------
1 是个类,绝对的。
2 第二句就是建个对象而已 
------解决方案--------------------
就是一种特殊定义类型的方式

class A
{
   
} //定义类型A

delegate void  MyInvoke(int a,int b); //定义类型MyInvoke

定义一个类型 不仅仅使用 class struct enum  之类的。。。
------解决方案--------------------
呵呵 明显的  委托 

在委托方法里面 判断
InvokeRequired


public void UpdateForm(string param1,string parm2)
{
if(this.textBox1.InvokeRequired)
this.Invoke(mi,param1,parm2);
else
this.textBox1.Text = param1+parm2;
}


这样就完善一点了
------解决方案--------------------
委托可以理解成函数指针,它的定义就是一个函数的签名, 第二句是Delegate的赋值方式,建议你这种概念性的东西还是上msdn看专业的解释. http://msdn.microsoft.com/en-us/library/ms173171(v=vs.90).aspx
------解决方案--------------------
public delegate void MyInvoke(string str1,string str2); 
//我本来以为delegate和public这种标志是类似的,查MSDN才知道原来delegate是个抽象类

的确有个delegate的类, 但这里delegate是一个关键词
http://msdn.microsoft.com/zh-cn/library/system.delegate(v=vs.90).aspx
Delegate 类是委托类型的基类。然而,只有系统和编译器可以显式地从 Delegate 类或 MulticastDelegate 类派生。
大多数语言实现 delegate 关键字,这些语言的编译器能够从 MulticastDelegate 类进行派生;所以,用户应当使用语言所提供的 delegate 关键字。

这里有一个编译器的概念~ 相当于翻译者~ 把你写好的代码翻译一下~ 翻译后意思差不多~ 但形式上会变
编译器会把
public delegate void MyInvoke(string str1,string str2);
可能编译成 MyInvoke 继承 MulticastDelegate : Delegate ;好了,暂时不纠结编译器编译后的样子