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语言简洁利于理解,语法上相对容易能够让开发者更专注于业务 ...
随机推荐
- Docker入门(转载)
Docker入门 一.Docker 1.什么是容器? 容器就是将软件打包成标准化单元,用于开发.交付和部署.容器是轻量的.可执行的独立软件包 ,包含软件运行所需的所有内容:代码.运行时环境.系统工具. ...
- PHP进阶之路 -- 02 面向对象
PHP进阶之路-- 之 “面向对象” 基础 概念 类的介绍和定义 类的属性 类常量 类的自动加载 构造函数和析构函数 访问控制 对象继承 范围解析操作符 static静态关键字 抽象类 对象接口 Tr ...
- React-Native传值方式之 :DeviceEventEmitter添加监听控制并传值到其他页面
在 native 开发中,我们可以使用广播实现事件的订阅和事件的触发,从而实现不在该页面但是可以调用该页面的方法. 在 React Native 中,我们也可以使用 DeviceEventEmitte ...
- 【神经网络与深度学习】【C/C++】比较OpenBLAS,Intel MKL和Eigen的矩阵相乘性能
比较OpenBLAS,Intel MKL和Eigen的矩阵相乘性能 对于机器学习的很多问题来说,计算的瓶颈往往在于大规模以及频繁的矩阵运算,主要在于以下两方面: (Dense/Sparse) Matr ...
- [转帖]看完这篇文章,我奶奶都懂了https的原理
看完这篇文章,我奶奶都懂了https的原理 http://www.17coding.info/article/22 非对称算法 以及 CA证书 公钥 核心是 大的质数不一分解 还有 就是 椭圆曲线算法 ...
- Linux就该这么学——安装配置VM虚拟机
Vm虚拟机下载地址 : https://cloud.189.cn/t/zAfaQvJZRziu (访问码:6717) rehl镜像下载地址 : https://cloud.189.cn/t/67BJ ...
- spark教程(六)-Python 编程与 spark-submit 命令
hadoop 是 java 开发的,原生支持 java:spark 是 scala 开发的,原生支持 scala: spark 还支持 java.python.R,本文只介绍 python spark ...
- Ruby初见
一. 简介 Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License. 二 ...
- Java web验证码——kaptcha的使用
一.配置kaptcha的jar包 pom.xml配置: <-- 目前只有2.3.2版本--> <!-- https://mvnrepository.com/artifact/com. ...
- MySQL性能优化(五):分表
原文:MySQL性能优化(五):分表 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbi ...