dotnet-Action&Func-使用笔记

这篇笔记探讨了C#中Action和Func的使用,它们是内置的代理类,简化了之前需要先声明delegate再定义和使用的过程。通过Action和Func可以直接实例化代理对象。下一部分将介绍委托和事件event。

本篇笔记延续上一篇delegate部分,因为Action和Func是dotnet内置的代理类。

之前使用代理时,需要先delegate申明一个代理,然后才能定义、使用。

由于dotnet中Action申明为:

public delegate void Action();

Func申明为:

public delegate TResult Func<out TResult>();

所以不需要再从新申明了,直接实例化代理对象即可。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DelegateDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // Action是.net内置的delegate,申明为public delegate void Action()
            // Action以及它的泛型,只能代理无返回值的方法,参数可以没有,最多支持16个
            Action myAction1 = new Action(ShowStockInfo1); // Action定义
            Action<string> myAction2 = new Action<string>(ShowStockInfo2); // Action定义 泛型,有一个参数、无返回值

            //myDelegate1(); // delegate使用
            myAction1();
            myAction2("002301");

            Stock myStock = new Stock(15.2, "零壹科技");
            // Func是.net内置的delegate,申明为public delegate TResult Func<out TResult>()
            // Func以及它的泛型,只能代理有返回值的方法,参数可以没有,最多支持16个
            Func<Stock, double> myFunc1 = new Func<Stock, double>(GetStockPrice); // Func定义 泛型,有一个参数、一个返回值
            Console.WriteLine("Stock {0} and Price is {1}", myStock.Name, myFunc1(myStock));

            Console.ReadLine();
        }

        // 直接在static Main函数中调用代理,静态函数只能调用本类的静态函数
        public static void ShowStockInfo1()
        {
            Console.WriteLine("Show Stock Info!\n");
        }

        public static void ShowStockInfo2(string code)
        {
            Console.WriteLine("Stock {0} Info Showed!", code);
        }

        public static double GetStockPrice(Stock _stock)
        {
            return _stock.Price;
        }
    }

    public class Stock
    {
        private double price;
        private string name;
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                ;
            }
        }
       public double Price
        {
            get
            {
                return price;
            }
        }

        public Stock(double _price, string _name)
        {
            price = _price;
            name = _name;
        }
    }
}

下一个笔记讲记录委托和事件event。

参考文档:

https://docs.microsoft.com/en-us/dotnet/api/system.action?view=net-6.0

https://docs.microsoft.com/en-us/dotnet/api/system.func-1?view=net-6.0

https://blog.youkuaiyun.com/qq_27278957/article/details/86636951

https://www.cnblogs.com/foolishfox/archive/2010/09/16/1827964.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值