为什么有的委托明明是两个参数的,但是 在调用的时候却可以只写一个参数?

2020-07-13 10:46发布

问题:

        public Form2()
        {
            InitializeComponent();
            this.label1.Click += new System.EventHandler(this.label1_Click_1);
        }

        void ev(object sender, EventArgs e)
        {
            MessageBox.Show(sender.ToString());
        }

        private void label1_Click_1(object sender, EventArgs e)
        {
            label1.BeginInvoke(new EventHandler(ev), new object[] { "I LOVE YOU" });
          
        }



这个为什么 我的委托时两个参数  却可以只写一个参数的啊?

回答1:

不一样的概念。委托你理解为把事件当参数就行了,所以就是这样

this.label1.Click += new System.EventHandler(this.label1_Click_1);

但是怎么调用是另外一回事



回答2:

你是说:

new object[] { "I LOVE YOU" }

这里只有一个参数吧?

确实,委托

new EventHandler(ev)

的ev函数是俩参数的,这里怎么是一个元素的数组呢?

 

1、这个代码是能编译通过的,这个没问题

2、能否运行,没做过实验,理论上是不能运行的

3、假如运行通过了,那估计ev函数的参数是引用类型,是可以为空的,于是使用了默认的null。

4、如果3的猜测是正确的,你可以在ev的函数里检查参数e是否为null



回答3:

参数可以是null



标签: c# winform