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

被折叠的 条评论
为什么被折叠?



