C#基础进阶
观看C#高级教程进行学习。巩固基础,进阶学习。
1.委托
把方法当做参数来传递就是委托。委托的关键字是delegate。
class Program
{
private delegate string GetString();
static void Main(string[] args)
{
int x=;
GetString a = x.ToString;//方法签名
string t = a();
Console.WriteLine("{0}", t);
Console.ReadKey();
}
}
委托获取X的String
Invoke方法也可以调用委托所引用的方法。a.Invoke();
Action委托 无返回值 void返回类型
static void Print()
{
Console.WriteLine("www"); }
static void Main(string[] args)
{
int x=;
Action a = Print;//Action是系统内置的一个委托类型,指向一个没有返回类型,没有参数的方法
a.Invoke();
Console.ReadKey();
}
Action委托
static void Print(int x)
{
Console.WriteLine("www"); }
static void Main(string[] args)
{
int x=;
//Action a = Print;//Action是系统内置的一个委托类型,指向一个没有返回类型,没有参数的方法
Action<int> a = Print;//定义一个委托类型,指向一个没有返回值,有一个int参数的方法。
a.Invoke(x);
Console.ReadKey();
}
Action
多个参数也是可以的。Action<T,T,T> 最多可以16个参数。
Func委托
static int Print ()
{
return ;
} static int test(string str)
{
Console.WriteLine(str);
return ;
} static void Main(string[] args)
{ Func<int> a = Print;//泛型指定的是方法的返回值类型
Func<string, int> b = test;//Func后面可以跟很多类型,最后一个类型是返回类型,前面都是参数类型,参数类型必须和方法参数对应。
//返回值类型必须有一个。
Console.WriteLine(a());
b("");
Console.ReadKey();
}
Func委托
Func委托依然支持16个参数,但必须有返回类型值。多个参数时,返回类型写最后一个。
Action理解为动作委托,执行,可加参数。Func比较全面。
这两种方法不需要自己定义,直接用就好了,比较方便。
多播委托->使用+=来进行追加委托引用。
Func<int, int, int> a = delegate(int add1, int add2)
{
return add1 + add2;
};//匿名方法本质是一个方法,任何使用委托的地方都可以使用匿名方法。
匿名方法
Func<int, int, int> plus = (add1, add2) =>//Lambda参数不需要声明类型
{ return add1 + add2;
};
Console.WriteLine(plus(, ));
Console.ReadKey();
Lambda表达式
Lambda表达式可以代替匿名方法。
2.事件
事件是受限制的委托。public event delegate Mydelegate;
3.LINQ查询
ModelInfo model = (from l in listModels
where l.modelName == strModelFunc && l.modelId == strModelID && l.line == strLine && strStation == l.station
select new ModelInfo
{
sid = l.sid,
modelName = l.modelName,
line = l.line,
csname = l.csname,
factory = l.factory,
modelId = l.modelId,
station = l.station
}).FirstOrDefault();
LINQ NEW对象
背景一个名字 功夫 等级表 一个功夫名和伤害表
var res= from m in List//from 设置查询的集合
where m.Level>
select m;//选中m 也可以是m中的属性
LINQ查询
var res=list.where(a=>a.level>)
扩展方法写法
var res= from m in alist
from n in blist
while m.kongfu=n.name &&n.power>//连接限制条件 功夫名字相等,杀伤力大于90
select m //获取人物(伤害大于90)
select new{master=m,kongfu=k}//获取全部的数据(在限制条件下)
LINQ联合查询
select最后选择的是获取什么数据
排序 orderby 降序 descending
多个字段排序 orderby m.level ,m.age //当第一个字段相同,按第二个来。
var res=from m in alist
join k in blist on m.kongfu equals k.Name
where k.power>
select new {master=m,kongfu =k};//两表连接
LINQ JOIN ON
方法写法有SKIP 跳页 ,两种写法可以混合使用。
4.反射和特性
程序及其类型的数据称为元数据。
查看本身或其他程序集的元数据的行为就叫反射。
MyClass myclass = new MyClass();
Type type=myclass.GetType();//获取类的type对象
Console.WriteLine(type.Name);//获取类名
Console.WriteLine(type.Namespace);//获取命名空间
Console.WriteLine(type.Assembly);//获取集合类
FieldInfo[] array=type.GetFields();//只能获取共有字段
foreach (var m in array)
{
Console.WriteLine(m.Name);
}
PropertyInfo[] array2 = type.GetProperties();//获取属性
foreach (var n in array2)
{
Console.WriteLine(n.Name);
}
MethodInfo[] array3 = type.GetMethods();//获取方法
foreach (var k in array3)
{
Console.WriteLine(k.Name);
}
Console.ReadKey();
Type对象
MyClass myclass = new MyClass();
Assembly assem = myclass.GetType().Assembly;//通过类的type对象获取所在程序集Assembly
Console.WriteLine(assem.FullName);
Type[] type=assem.GetTypes();
foreach (var k in type)
{
Console.WriteLine(k.Name);
}
Console.ReadKey();
Assembly对象
特性:向程序的程序集增加元数据的语言结构。
[Obsolete("该方法弃用",false)]//表示该方法已经弃用,第一个参数表示给予的提示信息,第二个参数表示是否显示错误,true会报错,false会提示警告.
static void OldMethod() {
}
Obsalete特性
#define IsTest//定义一个宏
[Conditional("IsTest")]
static void OldMethod()
{
Console.WriteLine(""); }
//在引用前面定义宏,使用Conditional特性,如果不需要使用该方法,注释宏定义即可。
Conditional特性
5.进程和线程
进程理解为一个应用程序,线程理解为应用程序下的任务。
Action a=Test;//委托a指向方法Test()
a.BeginInvoke(null,null);//开启线程去执行
异步委托BeginInvoke
Func<int,string,int> a= Test;
IAsyncResult ar=a.BeginInvoke(,“sky”,OnCallBack,a);
//倒数第二个参数表示一个委托类型的参数,表示回调函数,如果没有回调可以写Null,回调函数就是异步结束了会去调用这个委托指向的方法,倒数第一个参数表示用来给回调函数传递数据。
static void OnCallBack(IAsyncResult ar)
{
Func<int,string,int> a=ar.AsncState as Func<int,string,int>;
int res=a.EndInvoke(ar);
}
回调函数
线程
static void DownloadFile()//无参
{
}
Thread t= new Thread(DownloadFile);//创建Thread对象,但没有启动
t.Start()//启动 static void DownloadFile(object Filename)//带参数,只能是objec对象
{
}
Thread t= new Thread(DownloadFile);//创建Thread对象,但没有启动
t.Start("")//启动 参数在start中传入
Thread
前台线程和后台线程
前台线程,前台线程当Main方法结束了,依然在运行,直到前台线程完成其任务为止。
后台线程,当Main结束了,后台线程随之结束。
IsBackgroud设置。
线程池
static void ThreadMethod(object state)//线程池调用的方法默认带有Object参数
{
Console.WriteLine("线程开始"+Thread.CurrentThread.ManagedThreadId);
Thread.Sleep();
Console.WriteLine("线程结束");
}
static void Main(string[] args)
{
ThreadPool.QueueUserWorkItem(ThreadMethod);//开启一个工作线程 线程池默认是后台线程 不能修改为前台线程 只能用于比较短的线程
ThreadPool.QueueUserWorkItem(ThreadMethod);
ThreadPool.QueueUserWorkItem(ThreadMethod);
ThreadPool.QueueUserWorkItem(ThreadMethod);
ThreadPool.QueueUserWorkItem(ThreadMethod);
Console.ReadKey(); }//多个线程的情况,例如第一秒跑第一个 第二秒跑第二个
线程池

C#基础进阶的更多相关文章
- 【简单易懂的AMV图文教程-2】VEGAS基础进阶——认识关键帧
[简单易懂的AMV图文教程-2]VEGAS基础进阶--认识关键帧 经过了上一期VEGAS基础教程的学习,相信大家都能独立完成一些比较简单的纯剪辑作品了.今天在这里为大家继续介绍VEGAS的一大基础应用 ...
- 老王Python培训视频教程(价值500元)【基础进阶项目篇 – 完整版】
老王Python培训视频教程(价值500元)[基础进阶项目篇 – 完整版] 教学大纲python基础篇1-25课时1.虚拟机安装ubuntu开发环境,第一个程序:hello python! (配置开发 ...
- js基础进阶--关于setTimeout的思考
欢迎访问我的个人博客:http://www.xiaolongwu.cn 先热身 看看下面的额代码会打印出什么? for (var i = 0; i < 5; i++) { setTimeout( ...
- js基础进阶--图片上传时实现本地预览功能的原理
欢迎访问我的个人博客:http://www.xiaolongwu.cn 前言 最近在项目上加一个图片裁剪上传的功能,用的是cropper插件,注意到选择本地图片后就会有预览效果,这里整理一下这种预览效 ...
- 第二十八节:Java基础-进阶继承,抽象类,接口
前言 Java基础-进阶继承,抽象类,接口 进阶继承 class Stu { int age = 1; } class Stuo extends Stu { int agee = 2; } class ...
- python最全学习资料:python基础进阶+人工智能+机器学习+神经网络(包括黑马程序员2017年12月python视频(百度云链接))
首先用数据说话,看看资料大小,达到675G 承诺:真实资料.不加密,获取资料请加QQ:122317653 包含内容:1.python基础+进阶+应用项目实战 2.神经网络算法+python应用 3.人 ...
- 前端基础进阶(五):全方位解读this
https://segmentfault.com/a/1190000012646488 https://yangbo5207.github.io/wutongluo/ 说明:此处只是记录阅读前端基础 ...
- python学习大全:python基础进阶+人工智能+机器学习+神经网络
首先用数据说话,看看资料大小,达到675G承诺:真实资料.不加密.(鉴于太多朋友加我QQ,我无法及时回复,) 方便的朋友给我点赞.评论下,谢谢!(内容较大,多次保存) [hide]链接:[url]ht ...
- Mybatis基础进阶学习2
Mybatis基础进阶学习2 1.测试基本结构 2.三个POJO package com.pojo; import java.io.Serializable; import java.util.Dat ...
- 学习python须知,Python基础进阶需掌握哪些知识点?
Python基础进阶需要掌握哪些知识点?Python将是每个程序员的标配,有编程基础再掌握Python语言对于日后的升职加薪更有利.Python语言简洁利于理解,语法上相对容易能够让开发者更专注于业务 ...
随机推荐
- 重启 hdfs and yarn datanode
1- start-all.sh and stop-all.sh: Used to start and stop hadoop daemons all at once. Issuing it on th ...
- Docker学习笔记 — Docker私有仓库搭建
Docker学习笔记 — Docker私有仓库搭建 目录(?)[-] 环境准备 搭建私有仓库 测试 管理仓库中的镜像 查询 删除 Registry V2 和Mavan的管理一样,Dockers ...
- 业务型代码常用的SQL汇总(随时更新)
做了一年的业务代码开发,记录并分享一下自己平时在项目中遇到的比较好用的sql 1.查询表中是否某一字段下的数据有重复数据(以ID为例) SELECT id FROM 表名GROUP BY ID HAV ...
- 【DSP开发】【计算机视觉】TI 视觉软件开发套件ADAS
关键字:TI 视觉软件开发套件 ADAS 日前,德州仪器 (TI) 宣布推出其视觉软件开发套件(SDK),从而为开发人员提供了一款灵活的框架.一组丰富齐全的硬件设备驱动程序和一套适用的开发工具,可 ...
- 【Python开发】网页爬取心得
转载:python 爬虫抓取心得分享 title:python 爬虫抓取心得分享 0x1.urllib.quote('要编码的字符串')如果你要在url请求里面放入中文,对相应的中文进行编码的话,可以 ...
- 简单的利用nginx部署前端项目
网上有很多教程写的一大堆东西,新手可能会有点看不懂,现在我写这篇文章是为了更好的帮助新手,如何将自己的前端项目部署到自己的服务器上. 首先我们必须要有一台自己的ubuntu服务器,如果没有可以去阿里云 ...
- 2019牛客暑期多校训练营(第二场)-H Second Large Rectangle(次大子矩阵,降维,直方图+单调栈)
题目链接:https://ac.nowcoder.com/acm/contest/882/H 题目:给n×m的由01组成的矩阵,求次大全1子矩阵的大小. 思路:第一步还是降维操作,用a[i][j]记录 ...
- 面试40-一个数组,有2个数字出现奇数次,其余都是偶数次,求这两个数字O(n) O(1)
#include<iostream> using namespace std; // 题目:数组中只有不多于两个数字出现次数是奇数次,其他都是偶数次,求出出现奇数次的数字(不含0的数组) ...
- C++练习 | 单链表的创建与输出(结构体格式)
#include <iostream> #include <stdio.h> using namespace std; #define OK 1 #define ERROR 0 ...
- 从入门到自闭之Python整型,字符串以及for循环
Day 01 整型: 对比: 在python 2 版本中有整型,长整型long 在python 3 版本中全部都是整型 用于计算和比较 整型和布尔值的转换 二进制转换成十进制: print (in ...