大纲
- 什么是委托
- 委托类型是怎么声明出来的
- 泛型委托
- 我们必需自己创建委托吗?
泛型委托的类型参数判断
方法与Lambda表达式之间的关系
- 如何把一个Lambda表达式赋值给一个委托类型变量
如何把一个Lambda表达式“喂”给一个委托类型参数
LINQ
委托
委托包裹一些方法,一个或一组函数的封装器/包装器,可替换调用函数。
常规使用
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace DelegateImprove{public delegate void MyDelegate();class Program{static void Main(string[] args){Student student = new Student();MyDelegate myDelegate = new MyDelegate(Action);myDelegate += Action;//多播委托myDelegate += student.SayHello;myDelegate.Invoke();//同步间接调用,BegineInvoke()异步调用容易造成资源竞争}private static void Action(){Console.WriteLine("Hello World");}}class Student{public void SayHello(){Console.WriteLine("Student say hello");}}}
泛型
类型不是对象,而是对象的模板,泛型类型不是类型,而是类型的模板。
C#提供5种泛型:类,结构,接口,委托,方法
泛型的声明
Lambda表达式
static void Main(string[] args) {Func<int, int, int> func = (a, b) => { return a + b; };//Lamda表达式赋值给一个委托类型的变量int res = func.Invoke(100, 200);Console.WriteLine(res);}
泛型委托的类型参数推断
泛型委托的类型推断,可以省略DoSomeCalc
class Program {static void Main(string[] args) {DoSomeCalc<int>((a, b) => { return a + b; }, 100, 200);//Lambda表达式 (a,b)=>{return a+b;}作为形参赋值给委托类型的变量}static void DoSomeCalc<T> (Func<T,T,T>func,T x,T y) {T res =func(x, y);Console.WriteLine(res);}}
LINQ(临时使用,需要学习SQL)
LINQ:.NET Language Integrated Query .Net运行时
书籍参考:LINQ大揭秘系列 BV1rx41157DS
EF Entity FrameWork
var dbContext = new AdventureWorksEntities();var allPeople = dbContext.People.ToList();foreach(var p in allPeople){Console.WriteLine(p.FirstName);}var allPeople = dbContext.People.Select(p=>p.FirstName).ToList();var allPeople = dbContext.People.Where(p=>p.FirstName == "Timonty").Select(p=>p.FirstName).ToList();
