C#——Action与Func

Action和Fun都是委托,它们的区别在于Action没有返回值,Func有返回值。

首先来回顾一下delegate,传统的delegate用法如下:

        //定义委托
        delegate void Buy(string Something);

        //定义方法
        public void BuyFruit(string Fruit)
        {
            MessageBox.Show(Fruit);
        }
        
        //使用委托
        Buy buy = new Buy(BuyFruit);
        buy("苹果");

而Action和Fun就不用像delegate事先要声明一个委托,因为Action和Fun本身就是委托,按F12查看它们的原型:

		//Action
		public delegate void Action(T obj);
		
		Func
		 public delegate TResult Func();

所以我们在使用的时候可以直接对Action和Func进行实例化,还以上述的BuyFruit为例,Action的使用如下:

            Action buy = new Action(BuyFruit);
            buy(Fruit);

            Action buy1 = BuyFruit;
            buy1(Fruit);
            
            Action buy2 = Fruit1 => BuyFruit(Fruit1);
            buy3(Fruit);
            
            string Fruit = "苹果";
            Action buy3 = () => BuyFruit(Fruit);

上边我使用了4中方法对Action进行了实例化,后两种采用Lambda表达式的形式,这里插入一些关于Lambda表达式的内容,“=>”左边是参数,右边为函数体,所以对于现在这两个Lambda表达式来说,它的函数体就是 :

       public  void BuyFruit(string Fruit)
        {
            MessageBox.Show(Fruit);
        }

而这个函数体需要一个string类型的参数,后边这两个Lambda表达式唯一的不同在于参数的传递,第一个参数是由Lambda表达式传入,而后一个的参数是由定义好的局部变量传入,函数体并不关心参数从哪儿来,只要给我参数就行。

Action讲完了,下边说Func,Func是有返回值的委托,代码如下:

首先定义一个方法:

       public string BuyBook(string Book)
        {
            return Book;
        }

Func委托实现:

            Func Buy= new Func(BuyBook);

            Func Buy1 = BuyBook;

            Func Buy2 (Book1) => BuyBook(Book1);
            
            string Book = "数学";
            Func Buy3 = () => BuyBook(Book);

也许这里会有人问,我的BuyBook方法只接受一个参数,为什么在这里的Func有两个string。其实这里的Func中最后一个参数为返回值,并非参数。

你可能感兴趣的:(C#——Action与Func)