using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public delegate void MyDelegate();
public MyDelegate mydelgate;
public event MyDelegate EventMyDelegate;
//事件触发机制(必须和事件在同一个类中) 外界无法直接用EventMyDel()来触发事件
public void DoEventMyDelegate()
{
EventMyDelegate();
}
public void Fun_A()
{
MessageBox.Show("A方法触发了");
}
public void Fun_B()
{
MessageBox.Show("B方法触发了");
}
public void Fun_C()
{
MessageBox.Show("C方法触发了");
}
private void button1_Click(object sender, EventArgs e)
{
mydelgate();
}
private void Form1_Load(object sender, EventArgs e)
{
mydelgate = new MyDelegate(Fun_A);
//mydelgate += Fun_A;
mydelgate += Fun_B;
EventMyDelegate += Fun_A; EventMyDelegate += Fun_B;
}
private void button2_Click(object sender, EventArgs e)
{
mydelgate = null;
mydelgate += Fun_C;
}
private void button3_Click(object sender, EventArgs e)
{
DoEventMyDelegate();
}
private void button4_Click(object sender, EventArgs e)
{
EventMyDelegate = null;
<span style="white-space:pre"> </span>}
}
}
上面的代码,其中EventMyDelegate=null;这行代码在编译的时候并不会报错,但是以前在一个帖子里看过,说事件Event的没法对事件用赋值[=]号来进行注册,这就避免了破坏直接委托链的指针指向了。
我的编译器是VS2013,难道语法改了?