//声明一个委托
public delegate void VC_NMS_STATUS(string sParam, IntPtr lParam);
//OnSvrStatusChange是一个方法,请教这句话怎么解释呀?
static VC_SVR_STATUS SvrStatusChanged = new VC_SVR_STATUS(OnSvrStatusChange);
SvrStatusChanged 是一个委托? 委托可以直接关联方法?
SvrStatusChanged 是一个事件? 那为什么没有event呢?
public delegate void VC_NMS_STATUS(string sParam, IntPtr lParam);
//OnSvrStatusChange是一个方法,请教这句话怎么解释呀?
static VC_SVR_STATUS SvrStatusChanged = new VC_SVR_STATUS(OnSvrStatusChange);
SvrStatusChanged 是一个委托? 委托可以直接关联方法?
SvrStatusChanged 是一个事件? 那为什么没有event呢?
这就是创建一个VC_SVR_STATUS 的新委托啊不是必须有event,不要把委托跟绑到一起,委托远远不止event
MM的意思是
static VC_SVR_STATUS SvrStatusChanged = new VC_SVR_STATUS(OnSvrStatusChange);
实例化SvrStatusChanged 时将调用OnSvrStatusChange 此方法么? 也就意味着以后如果想调用OnSvrStatusChange 方法时,必须重新实例化SvrStatusChanged 对象么?
事件可以进入UI的设计器属性,而委托不行,我没有看到委托可以进入设计器属性的
本质上说VC_SVR_STATUS是一个特殊的类
这个特殊的类封装了OnSvrStatusChange方法的函数指针【SvrStatusChanged.Method属性】和
其所属对象【SvrStatusChanged.Target属性,如果是实例方法的话,静态的则为null】
SvrStatusChanged 是这个特殊类的一个对象,SvrStatusChanged点一下,会有属性或者方法
又因为这个类特殊,所以编译器提供有特殊的简化语法供使用,
例如你调用的话可以直接SvrStatusChanged (参数【如果OnSvrStatusChange方法需要的话】);
等同于SvrStatusChanged.Invoke(参数)
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而已。