//声明一个委托
public delegate void VC_NMS_STATUS(string sParam, IntPtr lParam);
//OnSvrStatusChange是一个方法,请教这句话怎么解释呀?
static VC_SVR_STATUS SvrStatusChanged = new VC_SVR_STATUS(OnSvrStatusChange);
SvrStatusChanged 是一个委托? 委托可以直接关联方法?
SvrStatusChanged 是一个事件? 那为什么没有event呢?

解决方案 »

  1.   

    static VC_SVR_STATUS SvrStatusChanged = new VC_SVR_STATUS(OnSvrStatusChange);
    这就是创建一个VC_SVR_STATUS 的新委托啊不是必须有event,不要把委托跟绑到一起,委托远远不止event
      

  2.   

    SvrStatusChanged 是一个委托的对象。实例化的时候,关联OnSvrStatusChange方法。
      

  3.   


    MM的意思是
    static VC_SVR_STATUS SvrStatusChanged = new VC_SVR_STATUS(OnSvrStatusChange);
    实例化SvrStatusChanged 时将调用OnSvrStatusChange 此方法么? 也就意味着以后如果想调用OnSvrStatusChange 方法时,必须重新实例化SvrStatusChanged 对象么?
      

  4.   

    委托其实就是一个特殊的方法,只不过方法的参数是方法而已。对于这个参数,你想用那个方法就用哪个方法。不一定飞得是OnSvrStatusChange方法。
      

  5.   

    另外事件通常和UI打交道,但不仅限于UI的。
    事件可以进入UI的设计器属性,而委托不行,我没有看到委托可以进入设计器属性的
      

  6.   

    那就先好好的看看event and delegate
      

  7.   

    static VC_SVR_STATUS SvrStatusChanged = new VC_SVR_STATUS(OnSvrStatusChange);
    本质上说VC_SVR_STATUS是一个特殊的类
    这个特殊的类封装了OnSvrStatusChange方法的函数指针【SvrStatusChanged.Method属性】和
    其所属对象【SvrStatusChanged.Target属性,如果是实例方法的话,静态的则为null】
    SvrStatusChanged 是这个特殊类的一个对象,SvrStatusChanged点一下,会有属性或者方法
    又因为这个类特殊,所以编译器提供有特殊的简化语法供使用,
    例如你调用的话可以直接SvrStatusChanged (参数【如果OnSvrStatusChange方法需要的话】);
    等同于SvrStatusChanged.Invoke(参数)
                
      

  8.   

    记得之前写过一个delegate的文章
      

  9.   

    一个个给你解释一下://声明一个委托
    public delegate void VC_NMS_STATUS(string sParam, IntPtr lParam);这样说是没错,声明一个委托,其实,你要理解,这和函数声明、变量声明压根不是一回事,而是写了一个类的声明,这个类继承自多播委托。这实际应该是
    public class xxxx:MulticastDelegate
    {
    ...
    }这一点你可以通过
    VC_NMS_STATUS obj = ...
    obj.BaseType.Name看到//OnSvrStatusChange是一个方法,请教这句话怎么解释呀?
    static VC_SVR_STATUS SvrStatusChanged = new VC_SVR_STATUS(OnSvrStatusChange);
    这是一种写法,记住就可以了。SvrStatusChanged 是一个委托? 委托可以直接关联方法?
    委托实际是继承自MulticastDelegate的一个类型,你实际是声明了一个新的类型,这个类的某个基类有个构造函数,传递的参数是和委托最初声明一致的一个函数。这个是写法,记住即可。SvrStatusChanged 是一个事件? 那为什么没有event呢?
    你这里不是时间,event是关键字,编译时就转换成了特殊属性,提供add,remove而已。