传智播客 传智播客.NET视频学习课件
访问.NET网站了解更多课程详情
http://net.itcast.cn
(小提示:为什么本书中超链接打不开?)
此套课件是伴随传智播客.net实况教学视频 (小提示:为什么本书中超链接打不开?)
的上课课件,作为传智播客.net公开课的一部分,免费提供给广大.net爱好者,您可以
自由分享本套课件,但禁止把他用于任何盈利性质的销售行为。否则我们将采取法律手
段来维护我们的正当权益。课件的知识产权归属传智播客。谢谢您的支持与理解!
观看须知 观看须知
1.Pdf是什么?我怎么看不了?
pdf是一种电子书格式,本套课件需要安装了pdf的软件才可以观看。推荐
"Foxitreader"(资源里有安装软件,直接安装就可以。已经用卡巴斯基
2010杀毒,请放心安装)
2.在观看过程点击链接报安全提示?没法打开电子书中的链接?
A用FoxitReader观看解决办法:
请找到软件中工具----选项-----左侧信任管理器---右边“启用安全阅读模
式”去掉“钩”即可。
B用AdobeReader观看解决办法:
一般直接点“允许”就可以了
3.这个资源是什么?
这是传智播客.NET 2010年培训班现场教学所用的课件,是货真价实的现
场授课内容。
4. 4.我如何下载传智播客.NET教学视频?
目前您可以通过3种方式,都是完全免费的!(小提示:为什么本书中超链接打不开?)
电骡(verycd):http://www.verycd.com/topics/2857178/ (推荐)
传智播客.net官方网站下载:http://net.itcast.cn/ViewArticle-103.aspx
如鹏网.net教学专区:http://www.rupeng.com/forum/forum-54-1.html
5.我想了解一下.net精品就业班的情况?如何预约报名?
请您访问传智播客.NET官方网站(http://net.itcast.cn)
找首页的客服了解具体报名情况。(小提示:为什么本书中超链接打不开?)
6.传智播客.Net精品就业班讲师介绍
杨中科,专注于企业级系统开发,撰写了《自己动手写开发工具》、《程序员
的SQL学习笔记》等技术图书。CSDN学生大本营2009年度十佳老师。
曾任职于微软中国、金蝶软件等知名IT企业,主导了金蝶EAS湖南烟草局
SCM系统、字符终端图形库AHA3及开发工具AHAIDE、上海浦东发展银
行图形前端等项目的开发,并且在中国工商银行批量平台、集中监控运维系
统(部署于中国工商银行、中国农业银行、交通银行、北京银行、深圳发展
银行等大中型银行)、力诺集团呼叫中心、新广源集团呼叫中心、大连地区
环 境 发 展 预 测 等 项 目 中 担 任 主 力 开 发 人 员 。杨 中 科 发 起 的 如 鹏 网 (
http://www.rupeng.com http://www.rupeng.com)是专门为计算机初学者提供学习指导的网站,
运营两年多来,撰写的大量的学习方法的文章和《C语言也能干大事》等视
频教程帮助无数的计算机初学者走出迷茫走入正确、快速发展的通道。
7.如何利用本课件学习?
配合传智播客.NET视频教程学习(http://www.verycd.com/topics/2857178/),
我们推荐您按如下顺序学习,效果更佳!
第1季C#编程基础
第2季C#面向对象基础
第3季WinForm基础
第4季SQL从入门到提高
第5季ADO.Net
第6季HTML
第7季JavaScript
第8季Dom
第9季JQuery
第10季asp.net基础
第11季asp.net中级
第12季asp.net高级
第13季ajax
传智播客会不断将现场教学中的教学内容以视频教程等方式整理发布出来,包括项目课程、其他.Net
高级技术等,了解最新视频教程及传智播客.Net教学的全部课程内容请访问传智播客.Net培训网站
http://net.itcast.cn
——高级软件人才实作培训专家
北京传智播客教育   www.itcast.cn
C#编程基础
讲师:杨中科
——高级软件人才实作培训专家
.Net开发环境(*了解)
.Net Framework
C# VB.Net F# ……
开发工具:Visual Studio
点Net、Dot Net
C Sharp
IronPython
提供函数库、类库
——高级软件人才实作培训专家
北京传智播客教育 www.itcast.cn
.Net简介(*了解)
.Net Framework
CLR
操作系统
应用程序 应用程序
操作系统
平台无关:CLR、.Net
Framework进行了隔离。
Windows、Linux(Mono)、
智能手机、Web、RIA。学
会.Net什么都能开发,知识
移植。
更安全、更省心:代
码托管、罕用指针、
垃圾回收。
语言无关:VB.Net、C#都
调用同样的类、同样的方
法,VB.Net写的类C#也可
以调用。模糊了语言的差

——高级软件人才实作培训专家
.Net 的版本(*了解)
.Net 1.1
.Net 2.0
.Net3.x
.Net4.x
……
Visual Studio2003
Visual Studio2005
Visual Studio2008
Visual Studio2010
……
向下兼容
大同小异
Express(免费版)
快捷版
Standard
标准版
Professional
专业版
Team Suite
团队版
常用的功能没啥差别,微软的定价策略
——高级软件人才实作培训专家
第一个C#程序
�创建第一个控制台程序并且调试运行。
�为什么要从控制台程序开始?不要把精力放到表现
层,而是把精力放到写代码上。无论控制台还是
Winform还是ASP.Net最难的是写代码,而不是拖控
件。
�唯一需要学的三条控制台指令:Console.WriteLine
:打印输出、Console.ReadLine:从控制台读入一
行、Console.ReadKey:控制台暂停。至于
Console.是什么意思不用管。1+1=2的例子
�占位符是个什么玩意儿?{0}的个数必须和参数的个
数一样,是一一对应的关系。
——高级软件人才实作培训专家
VS开发环境介绍
�解决方案管理器:解决方案、工程、文件
�C#源文件一般以cs结尾
�C#程序的入口是Main函数,在Main中写代码
就行,暂时不用关心其他部分是什么意思
�错误列表。见到编译错误不用慌。错误排除演
示。常见错误:结尾没有分号,大小写错误。
�显示代码行号。工具→选项→文本编辑器
→C#→显示→行号
——高级软件人才实作培训专家
C#语法
�从上到下一条条的依次执行。
�大小写敏感
�函数参数用()包围
�两句代码之间用分号(;)分割(易错:
全角问题)
�注释:单行注释、多行注释。
——高级软件人才实作培训专家
变量
� 把变量看成放数据的容器。
� 定义变量的方式:类型 变量名;  int i3;
� 变量的类型:不同类型的容器放不同的东西,铁罐不能放
硫酸。不能在int类型的变量中放字符串。
� 变量不能放和变量类型不兼容的数据。
� 变量的名字不能重名(不严格)
� 问题
•int i=10;Console.WriteLine("i");
——高级软件人才实作培训专家
常用基本数据类型
� string、int 、char 、bool 、decimal (了解) 、byte(了解)、double(了解)、
long(了解)、float(了解)等。
� bool的取值:true、false。
� 为什么输出"要用转义符"\"",因为编译器默认是遇到"开始字符串,再遇到"是结束字符
串,但是如果遇到前面有\的"就不把它当成有字符串起始意义的"。
� string:"\"ab\""、"ab\nb"、"c:\\a.txt"、@"c:\a.txt"(推荐)。@表示字符串中的\不当
成转义符
� @不是万能的,不能解决字符串中有双引号的问题,如果有双引号还是用转义符
� ‘a’是char,"a"是string
� string s = Console.ReadLine();
� 问题:
• String str=Console.ReadLine();
• Console.WriteLine(str);
• 用户输入a\nb,输出什么?转义符只针对在代码中直接写出的字符串,对于程序
中读取出来没有这个问题。
� 简单的类型转换:Convert.ToString()、ToString()、Convert.ToInt32() 。
� 输入一个数,打印这个数的平方。
——高级软件人才实作培训专家
补充
�问题:int
i=Convert.ToInt32(Console.ReadLine())
�string s1 = Console.ReadLine();
�int i = Convert.ToInt32(s1);
�@可以表示多行字符串。
——高级软件人才实作培训专家
变量的命名
� 命名规则:第一个字符必须是字母或者下划线(_),其后的字
符可以是任意个数字、字母、下划线。不能全部使用C#的关键
字,比如class、namespace、new、void等。判断方式:VS中
亮蓝色的就是关键字。
� 这也是类、函数等的命名规则。
� 中文变量名(类名、函数名)。
� C#中建议变量的开头用小写。
� 下列哪个是正确的变量名?_a、a、a1、a_a、1_a、a1、1a、
a3_、a$b、int、int1、a b、A1、INT。
� 变量的声明:int i;int x,y;int i=3;
——高级软件人才实作培训专家
运算符、表达式
�+、-、*(乘)、/(除)、%(求余)
�+可以用作字符串连接,其他不可以。将string
和其他类型+,会自动tostring();
�易错:string s1 = "hello"+yang;
�++(自增)、--(自减)
�(*)运算符优先级:i1+i2*i3、(i1+i2)*i3。不要
变态,括号是王道。内层的()先计算。
�变量可以和字面量混合运算。
�案例:让用户输入两个数,打印出两个数的和。
——高级软件人才实作培训专家
赋值
� 赋值运算符=,让左边变量的值等于右边的计算结果。这就能解
释令人不解的i=i+1;
� (*)+=、-=、*=、/=。
� i2=i1++;i2=++i1;(了解)。--同理。
� 习题:int a=10;a++;a=a+a;Console.WriteLine("{0}",a);执行结果
是什么?
� 易错:int i=10;int j=i;i=5;j=?。
� int x=10;x+y=80;Console.WriteLine(y); x + y = 80; //左
边的必须是变量!!!不能是常量,不能
是表达式
� 习题:交换两个变量的值
——高级软件人才实作培训专家
布尔运算
� 相等判断:==,不要和=混淆。
WriteLine("{0}",i==1);WriteLine("{0}",i=1);的区别。
Console.WriteLine("{0}",i=1);//C#中赋值表达式也有值,它的
值表示为赋值后变量的值
� 不等判断:!=
� 大小比较:<、>、<=、>=
� 取反:!
� 组合运算:&&(并且)、||(或者)。
• && 并且:只有两边都为true的时候,表达式的值才为true,否则是
false;
• ||或者:两边只要有一个为true的时候,表达式的值就是true,否则
是false;
——高级软件人才实作培训专家
if
if(i>1)
{
}
if(i>1)
{
}
else
{
}
if(i>100)
{
}
else if(i<10)
{
}
else
{
}
单句的时候大括号可以省略,但是不建议省
略,演示说明why
if语句的嵌套
if(i>100||i<10)
{
}
if(i>100&&j>10)
{
}
if((i>0&&j>0)||(i<0&&j<0))
{
}
易错代码:
if(i>10);
{
    Console.WriteLine("是");
}
——高级软件人才实作培训专家
课上练习
� 学编程不是看书,不是听老师讲,而是自己动手写。
� 作业1:提示用户输入密码,如果密码是“888888”则提示正确,否则提示错误。
� 作业2:提示用户输入密码,如果密码是“888888”则提示正确,否则要求再输入
一次,如果密码是“888888”则提示正确,否则提示错误。
� 作业3:提示用户输入用户名,然后再提示输入密码,如果用户名是“admin”并且
密码是“888888”,则提示正确,否则提示错误,如果用户名不是admin还提示用
户用户名不存在。
� 作业4:提示用户输入年龄,如果大于等于18,则告知用户可以查看,如果小于
10岁,则告知不允许查看,如果大于等于10岁,则提示用户是否继续查看(yes
、no),如果输入的是yes则提示用户可以查看,否则提示不可以查看。(测试
边界条件,-1,8888888888888888888888888,aaaa。微软如狼似虎的Tester)
� 作业5:依次提示用户输入两个整数(假设i1、i2)。如果i1、i2都是正数,则将
i1的值递增一个数,然后打印i1+i2的值;如果i1、i2都是负数,则将i1的值递减
10个数,然后打印i1*i2的值;如果i1、i2中任一个为0,则提示数据有错误;否则
计算i1*i2的绝对值。
� 注意:变量命名要用有意义的变量名。
——高级软件人才实作培训专家
switch case
� 类似于if...else...else if...else,但是是离散值的判断。
� switch一般都可以用if重写,但是if不一定能用switch重写
� 不要忘了break。C#中的break不写是不行的,除了合并case的情况
switch(i)
case 1:
//
break;
case 2:
//
break;
switch(i)
case 1:
//
break;
case 2:
//
break;
default:
break;
case中的值必须
是常量,不能是
变量、表达式。
switch(i)
case a:
//
break;
switch(i)
case 1:
case 2:
//
break;
被判定的值进入满
足条件的分支执行
——高级软件人才实作培训专家
while循环
while(i<100)
{
  //打印i
  i++;
}
只要while后小括号中的表达式为true,就不断执行
大括号中的代码
while(不是终点)
{
    跑
}
do
{
  //打印i
  i++;
}
while(i<100)
先做……如果满足则再来一次,直至while表
达式为false。至少被执行一次。(*)
练习1:用while计算1到100之间整数的和;(有更好的数学解法)
练习2:要求用户输入用户名和密码,只要不是admin、888888就一直提示要求重新输入。
练习3:不断要求用户输入一个数字,然后打印这个数字的二倍,当用户输入q的时候程序退
出(return)。
练习4:不断要求用户输入一个数字(假定用户输入的都是正整数),当用户输入end的时候
显示刚才输入的数字中的最大值。设一个变量int max,初始值为0,用户每输入一次就把用
户输入的和max比较一下,如果输入的比max大,则让max等于用户输入。
易错:(1)string s = Console.ReadLine(),读取s的时候并不会再次要求输入;(2)
while(Console.ReadLine()!="q")
——高级软件人才实作培训专家
循环的中断
� break:立即终止整个循环。
� continue:立即终止当前循环步骤,进行下一次循环步骤。
� 练习1:用 while continue实现计算1到100之间的除了能被7整除
之外所有整数的和。
� 练习2:用while break实现要求用户输入用户名和密码,只要不
是admin、888888就一直提示要求重新输入。
� 练习3:编写聊天机器人,如果问“今天天气怎么样?”则回答天气
,如果问……,如果说“88”,则“再见”。
——高级软件人才实作培训专家
for循环
� for(code1;code2;code3)。code1:循环的初始化代码,只在循环开始之前运行一
次;code2,bool类型的表达式,每次循环完前都判断一下是否为true,只有为
true才会进行本次循环;code3在每次循环之后执行一次。各段之间用回车换行
,设置断点查看执行过程。
� for的三段都可以省略,但是不能丢了“;”。
� break、continue同样可以应用于for。
� for和while代码之间都可以互相转换,究竟用哪种方式则取决于一些惯用用法和
个人习惯,不用记,代码写多了自然就有感觉
for(int i=0;i<10;i++)
{
}
for(int i=100;i>0;i--)
{
}
如果是遍历数组,遍历1..100推荐直接在第一段中声明变量。
for中终止条件注意是<还是<=
用 for实现计算1到100之间所有整数的和。用 for实现计算200到300之
间所有整数的和。
——高级软件人才实作培训专家
类型转换Cast(*)
� 把源类型赋值给目标类型,两个类型不一致的时候会发生类型转换。a=b,b是源
,a是目标
� 隐式转换、显式转换。当目标类型一定能满足源类型转换过去后的要求的话就是
隐式转换;如果当目标类型不一定能满足源类型转换过去后的要求的话就需要显
式转换(程序员自己负责)。
� 把中国人转换为人是隐式转换,把人转换为中国人则是显式转换(强制转换)
� 内存中的数据没有变化,只是不同的视角而已。
� int、byte的表示范围:int.MaxValue、int.MinValue。
� byte b=1;int i=1;i = b;b = (byte)i;
� 为什么要显式转换?编译器不能保证一定正确,转换结果自己负责。要人、给一
个中国人当前没问题,但是要中国人、给一个人则可能有问题,编译器不承担这
个责任,由开发人员来保证。
� 只有在内存存储上存在交集的类型之间才能进行Cast,否则则不可以,比如不可
以int i;string s=(string)i;反之也不可以。这种情况必须用Convert类提供的方法。
——高级软件人才实作培训专家
类型转换Convert
�Convert不再是内存级别的转换,而是考
虑数据意义的转换。可以把姓名Convert
成人。Convert是一个加工、改造的过程
�Convert.ToInt32、Convert.ToString、
每种类型都还有ToString方法(类型的
ToString和Convert.ToString略微的差别
暂时不用关心)
——高级软件人才实作培训专家
枚举
确定数量、确定值的几个取值:东西南北、男女、上中下。
enum Gender{male,female}
enum QQStatus{online,offline,hidden}
为什么有枚举,如果用string来表示四季:
• //1、需要在每个地方都进行数据合法性的校验
• //2、给函数传递参数的时候,只有看文档才只能哪些值合法
枚举的用法,QQStatus status = QQStatus.online;
和用字符串比起来,用枚举的好处就是限定了变量的取值范围,程
序处理起来更方便。
为什么不能:QQStatus status = online;
——高级软件人才实作培训专家
数组
� 保存多个值。任意类型都可以声明数组。
int[] nums = {5,3,8} int[] nums = new int[3]
int[] nums = new int[3]{5,3,8}//个数和声明个数必须一致
int[] nums = new int[5]{5,3,8}//错误
使用索引器访问指定编号位置的元素,访问数组元素:nums[0]、nums[1]。索引从0开始。取到的元
素的类型就是数组元素的类型。还可以对数组元素进行赋值
数组的长度一旦声明就无法改变
练习1:从一个整数数组中取出最大的整数
练习3:将一个字符串数组输出为|分割的形式,比如“小月月|大月月|老月月”
练习4:将两个int类型数组连接为一个string类型数组。
练习2:计算一个整数数组的所有元素的和。
练习5:有一个整数数组,请声明一个字符串数组,将整数数组中的每一个元素的值转
换为字符串保存到字符串数组中。string[] strs = new string[values.Length];
练习6:将一个字符串数组的元素的顺序进行反转。{"3","a","8","haha"}
{"haha","8","a","3"}。第i个和第length-i-1个进行交换。
练习7:将一个int数组向左滚动平移1次。{3,5,8,7}→{5,8,7,3}
——高级软件人才实作培训专家
数组2
foreach循环
string[] names= {"tom","jerry","lily"};
foreach(string name in names)
{
   Console.WriteLine("我的名字{0}",name);
}
和for的区别:for可以不逐个遍历,比如每隔一个遍历一个,或者可
以从后向前遍历
只能(只应该)在foreach对集合进行读,而不应该写。
——高级软件人才实作培训专家
函数
� 函数就是将一堆代码进行重用的一种机制。函数就是一段代码,
这段代码可能有输入的值(参数),可能会返回值。一个函数就
像一个专门做这件事的人,我们调用它来做一些事情,它可能需
要我们提供一些数据给它,它执行完成后可能会有一些执行结果
给我们。要求的数据就叫参数,返回的执行结果就是返回值。
� Console.ReadLine就是一个有返回结果的函数;
Console.WriteLine("hello")就是一个有执行参数的函数,只有告
诉WriteLine被打印的数据它才知道如何打印;int i=
Convert.ToInt32("22")则是一个既有参数又有返回值的函数。
� 有了函数写代码就像拼积木,C#中的各种各样的技术其实就是
通过for、if等这些基础的语法将不同的函数按照一定的逻辑组织
起来。
——高级软件人才实作培训专家
自己写函数
1 读取输入的整数,定义成函数,多次调用
static int ReadInt()
{
   String s = Console.ReadLine();
   return Convert.ToInt32(s);
}
写程序测试,程序调用到函数的时候是进入函数内部执行的,执行完毕再继续向下执行。
2、函数如果没有返回值则标记返回值类型为void
3、return语句
导致函数立即返回。在返回值为void的函数中return,在返回值非void的函数中"return 数值"。
return不是结束程序,只是结束当前函数,控制台程序中Environment.Exit(0)退出程序。
——高级软件人才实作培训专家
函数返回值易错点
一个函数如果“答应”返回一个非void类型的值
,则函数的所有路径都要有返回值。比如
将对输入年龄转换为年龄段描述的函数。
——高级软件人才实作培训专家
函数参数
� 计算两个整数中的最大值:int Max(int i1,int i2)
� 计算输入数组的和:int Sum(int[] values)
� 确定函数参数的原则:自己能确定的数据自己内部解决,自己确
定不了的数据通过参数传递。
� 练习:string[] strs={"aa","333","ccc"};
� 返回给我一个字符串,然后字符串使用我指定的分隔符来进行分
割,比如我指定用"|"分割,那么返回给我"aa|333|ccc"。
� string Join(string[] strs,string seperator)
� 问题:函数名开头大写,参数名开头小写,参数名、变量名要有
意义
——高级软件人才实作培训专家
可变参数
�参数数组:int sum(params int[] values)
int sum(string name,params int[] values)
可变参数数组必须是最后一个
�参数默认值(.Net4.0) :void
SayHello(string name,int age=20)(*了解)
——高级软件人才实作培训专家
函数重载(函数重名)
函数的重名:错误
static void SayHello(string name)
{
    Console.WriteLine("我是{0}",name);
}
static void SayHello(string name)
{
    Console.WriteLine("I am{0}",name);
}
static void SayHello(string name)
{
    Console.WriteLine("我是{0}",name);
}
static void SayHello(int age)
{
    Console.WriteLine("我的年龄{0}",age);
}
static void SayHello(string name) 错误
{
    Console.WriteLine("我是{0}",name);
}
static int SayHello(string name)
{
    return 10;
}
static void SayHello(string name)
{
    Console.WriteLine("我是{0}",name);
}
static void SayHello(string name,string nickname)
{
    Console.WriteLine("我是{0},昵称是
{1}",name,nickname);
}
构成重载的条件:参数类型不同或者参数个数不同(不严谨
的),与返回值无关。
——高级软件人才实作培训专家
字符串的处理
� C#中单个字符用单引号包含就是char类型,('a'),单引号中放
且只能放一个字符。
� 单个字符也可以表示为字符串,还可以有长度为0的字符串
� 使用s.Length属性来获得字符串中的字符个数
� string可以看做是char的只读数组。char c = s[1];。例子:遍历输
出string中的每个元素。
� C#中字符串有一个重要的特性:不可变性,字符串一旦声明就
不再可以改变。所以只能通过索引来读取指定位置的char,不能
对指定位置的char进行修改。
� 如果要对char进行修改,那么就必须创建一个新的字符串,用s.
ToCharArray()方法得到字符串的char数组,对数组进行修改后
,调用new string(char[])这个构造函数(暂时不用细研究)来创
建char数组的字符串。一旦字符串被创建,那么char数组的修改
也不会造成字符串的变化。例子:将字符串中的A替换为a。
——高级软件人才实作培训专家
常见疑问
� 谁说字符串不可变?string s = "abc";s="123",s这不是变了吗
� 要区分变量名和变量指向的值的区别。程序中可以有很多字符串,然后
由字符串变量指向他们,变量可以指向其他的字符串,但是字符串本身
没有变化。字符串不可变性指的是内存中的字符串不可变,而不是变量
不变。
� string s10 = s1;//s10指向s1指向的字符串,而不是s10指向s1,哪怕s1
以后指向了其他内存,那么s10还是指向"hello"
abc
admin
888888
s1
s1
——高级软件人才实作培训专家
String类常用函数
� ToLower():得到字符串的小写形式。
� 注意字符串是不可变的,所以这些函数都不会直接改变字
符串的内容,而是把修改后的字符串的值通过函数返回值
的形式返回。s.ToLower()与s=s.ToLower()
� ToUpper():得到字符串的大写形式; Trim()去掉字符串两
端的空白。
� s1.Equals(s2, StringComparison.OrdinalIgnoreCase),两
个字符串进行比区分大小写的比较。
——高级软件人才实作培训专家
字符串的分割
� string[] Split(params char[] separator):将字符串按照指定的分割符分
割为字符串数组;
� string[] Split(char[] separator, StringSplitOptions options)将字符串按照
指定的char分割符分割为字符串数组( options 取
RemoveEmptyEntries的时候移除结果中的空白字符串);
� string[] Split(string[] separator, StringSplitOptions options)将字符串按
照指定的string分割符分割为字符串数组。
� 例子1:从日期字符串("2008-08-08")中分析出年、月、日;2008年
08月08日。
� 例子2:从一个记录了学生成绩的文本文档,每个学生成绩是一行,每
行是用|分割的数据,用|分割的域分别是姓名、年龄、成绩,写程序取
出成绩最高学生的姓名和成绩。参考:使用string[] lines =
System.IO.File.ReadAllLines(@"c:\root.ini", Encoding.Default);从文本
文件读取数据,返回值为string数组,每个元素是一行。
——高级软件人才实作培训专家
字符串函数详解
� 字符串替换:string Replace(string oldValue, string newValue)
将字符串中的出现oldValue的地方替换为newValue。例子:名
字替换。
� 取子字符串:string Substring(int startIndex),取从位置
startIndex开始一直到最后的子字符串;
� string Substring(int startIndex, int length),取从位置startIndex
开始长度为length的子字符串,如果子字符串的长度不足length
则报错。
� bool Contains(string value)判断字符串中是否含有子串value
� bool StartsWith(string value)判断字符串是否以子串value开始;
� bool EndsWith (string value)判断字符串是否以子串value结束;
� int IndexOf(string value):取子串value第一次出现的位置。
——高级软件人才实作培训专家
字符串的处理练习
� 课上练习1:接收用户输入的字符串,将其中的字符以与输入相反的顺
序输出。"abc"→"cba"
� 课上练习2:接收用户输入的一句英文,将其中的单词以反序输出。
"hello c sharp"→"sharp c hello"
� 课上练习3:从Email中提取出用户名和域名:abc@163.com。IndexOf
找到@的位置。SubString。
� 课上练习4:文本文件中存储了多个文章标题、作者,标题和作者之间
用若干空格(数量不定)隔开,每行一个,标题有的长有的短,输出到
控制台的时候最多标题长度20,如果超过20,则截取长度17的子串并且
最后添加“...”,加一个竖线后输出作者的名字。
� 练习5:自己动手写聊天机器人,能够回答不同城市的天气、回答感情
问题、问的次数过多还会饿死,提问可以模糊提问(包含指定关键词)
。问“天气:北京”就回复“北京的天气是晴”。
——高级软件人才实作培训专家
函数的ref、out参数(*)
函数参数默认是值传递的,也就是“复制一份”,例子:
int age=20;
IncAge(age);
Console.WriteLine("age={0}",age);
ref必须先初始化,因为是引用,所以必须先“有”,才能引用,而
out则是内部为外部赋值,所以不需要初始化,而且外部初始
化也没用。
ref应用场景内部对外部的值进行改变,out则是内部为外部变量
赋值,out一般用在函数有多个返回值的场所。
案例:两个变量的交换;int.TryParse。
——高级软件人才实作培训专家
面向对象概念(*)
�面向对象不是取代面向过程的。
�类、对象。“人”是类,“张三”是“人”这个类的对象。类是抽象的,对
象是具体的。按钮就是类,某个按钮就是对象。对象可以叫做类的实
例(Instance)。类就像int,对象就像10。字段Field(和某个对象相
关的变量),字段就是类的状态。人这个类有姓名、年龄、身高等字
段。类不占内存,对象才占内存。
�方法Method,方法就是类能够执行的动作,比如问好、吃饭等。
�类的继承,类之间可以有继承关系,比如“电脑”类可以从“电器”类继
承,这样的好处是“电脑”类只需要定义自己特有的字段、方法就可
以,也就是只要定义内存大小、CPU型号这些字段或者弹出光驱等方
法就可以。父类(Parent)、基类(Base,基业,祖宗十八代传下来的)。
电脑类是电器类的子类(ChildClass)。重用。
�面向对象的三个特性:封装、继承、多态。
�没有面向对象的世界中的难题。
——高级软件人才实作培训专家
定义类
�class Person{ }
定义方法(类的函数):
    class Person
    {
        public void SayHello()
        {
            Console.WriteLine("你好,我是{0}",this.Name);
            //不写this.也可以,写上更清晰
        }
    }
初始化对象,调用方法:
            Person tom = new Person();
            tom.SayHello();
对象必须调用构造函数初始化“new Person()”后才能用,不
能Person tom这样声明;就调用。
定义字段:
    class Person
    {
       public string Name;
        public int Age;
        public void SayHello()
        {
            Console.WriteLine("你好,我是
{0}",Name);
        }
    }
初始化对象,调用方法:
            Person tom = new Person();
            tom.Name="tom";
            tom.SayHello();
Console.WiteLine("{0}",tome.Name)
一个类可有有多个实例。
类就是把一系列相关的变量(状态)、行为定义为一个整体。
字段记录的就是这个对象相关的数据。
——高级软件人才实作培训专家
成员访问级别
� 字段、方法、属性(后面讲)都可以叫做类的成员Member,它们都需要定义
访问级别。访问级别的用处在于控制成员在哪些地方可以被访问,这样达到
面向对象中“封装”的目的。
� 几个访问级别:public(任何地方都可以访问);private(默认级别。只能由
本类中的成员访问)。还有internal、protected两个级别,以后会讲。
    class Person
    {
       private string Name;
      
       public void GiveName(string name)
{
    Name = name;//拒绝不好听的名字
}
        public void SayHello()
        {
            Console.WriteLine("你好,我是
{0}",Name);
        }
    }
           Person tom = new Person();
           tom.GiveName("tom");
            //tom.Name="tom";
            tom.SayHello();
 
永远不要把字段public
——高级软件人才实作培训专家
属性
惯用法:属性开头字母大写,字段开头字母小写
    class Person
    {
        private int age;
        public int Age
        {
            get{return age;}
            set{age=value;}
        }
        public void SayHello()
        {
            Console.WriteLine("我的年龄是{0}",Age);
        }
    }
�只用set或者只用get就可以定义只读
或者只写属性(只写的不常见)
�可以为set、get设置访问级别
�例子,限制非法值的设置
�(.Net3.x)简化set、get:public int
Age{get;set;}。适合于set、get中没有
特殊逻辑代码的情况。允许外部访问
的值一定要声明为属性。
�字段和属性的区别是什么?属性看似
字段、不是字段,可以进行非法值控
制,可以设置只读。
�set、get块内部其实就是get_***、
set_***方法。
——高级软件人才实作培训专家
课上练习
�面向对象版聊天机器人
�机器人有不同的名字、维护自己的
FullLevel,可以SayHello(我叫***),可
以喂食(Eat(int foodCount)),可以对它
说话(Speak),对异常情况(错误的喂
饭数字,喂的太多撑死了)进行处理,有
两个机器人供选择,一开始通过1、2数字
选择聊天机器人。
——高级软件人才实作培训专家
构造函数
� 构造函数用来创建对象,并且可以在构造函数中对对象进
行初始化。
� 构造函数是用来创建对象的特殊函数,函数名和类名一样
,没有返回值,连void都不用。
� 构造函数可以有参数,new对象的时候传递函数参数即可
� 构造函数可以重载,也就是有多个参数不同的构造函数。
� 如果不指定构造函数,则类有一个默认的无参构造函数。
如果指定了构造函数,则不再有默认的无参构造函数,如
果需要无参构造函数,则需要自己来写。
——高级软件人才实作培训专家
对象的引用(非常重要)
�i1=3;i2=i1;i1++;//i2是3
�p1=new Person();p1.i=3;p2=p1;p1.i++;//p2.i
是4
�int、string、decimal、bool、byte等基础类型
(值类型)是传递拷贝;对象(引用类型)则
是传递引用。因为基础类型不怎么占内存,而
对象则比较占内存。
�函数间传递对象。
�为对象变量重新赋值。p2=p1是让p2指向p1指
向的对象。
——高级软件人才实作培训专家
继承
public class Chinese:Person
{
    public string HuKou{get;set;}
    public void KongFu(){....}
}
Chinese p1 = new Chinese();
p1.Name="李雷";
p1.HuKou="北京市朝阳区";
p1.SayHello();
p1.KongFu();
定义类的时候不指定父类,则父类是
Object类。Object类是任何类的直接或者间
接父类。
——高级软件人才实作培训专家
对象的隐式转换和显式转换
Chinese ch= new  Chinese();
//隐式转换,把子类变量赋值给父类变量
Person p = ch;
//显式转换,把父类变量赋值给子类变量
Person p = new Chinese();
Chinese ch = (Chinese)p;
//如果对象不在同一个继承树路径上
//则不能强制类型转换
Dog g = new Dog();
Chinese ch = (Chinese)g;//错误
//is运算
if(p is Chinese)
{
    Console.WriteLine("中国人");
}
else if(p is Korean)
{
    Console.WriteLine("韩国人");
}
//as 运算符
Chinese ch = p as Chinese ;
if(ch!=null)
{
   Console.WriteLine("中国人");
}
Korean ch = p as Korean ;
if(ch!=null)
{
   Console.WriteLine("韩国人");
}
()转换和as 转换的区别:如果转换失败()
会报异常,而as则会返回null。
——高级软件人才实作培训专家
异常与异常处理
� 传统的错误表示方式:错误码。举例。需要知道不同错误
码的含义,如果不处理错误码,则程序可能陷入不可以预
置的错误。陈摄影师以为文件已经被删除造成的麻烦。
� 错误码的缺点:不处理则很难发现,每次处理则很麻烦;
难以看出错误的原因;容易使得程序进入不确定状态。
� try catch。Exception ex 异常也是对象。
� Exception 类主要属性:Message、StackTrace
� 发生异常后程序默认就退出了,try代码块中的后续代码不
会被执行。catch以后的代码则会继续执行。
� 不要吃掉异常,一般情况下不需要处理异常。
� 扔出自己的异常,扔:throw,抓住:catch
——高级软件人才实作培训专家
常量与静态成员
� const常量。常量名要大写。一定不会变化的值才能
声明为常量。
�全局变量。static类变量。
�不用new就能用的方法:static方法,static方法其实
就是普通函数
�在static方法中可以调用其他static成员,但是不能
调用非static成员。在非static方法中可以调用static
成员。
�静态类,不能被new的类就是静态类。静态类一般
用来实现一些函数库。***Helper,SqlHelper,
PageHelper。
——高级软件人才实作培训专家
命名空间
� namespace(命名空间),用于解决类重名问题,可以看
做“类的文件夹”。
� 在代码中使用其他类的时候需要using类所在的namespace
。System.Collections.ArrayList,快速引入的方法,右键
→解析(Ctrl+.)。
� 为什么使用Convert、Console等类不需要自己写using?
� 如果代码和被使用的类在一个namespace则不需要using。
� 可以修改默认的namespace,因此不要认为在相同文件夹
下就不用using,不在相同文件夹下就需要using。
� 类内部定义的类的引用:namespace+外部类名+内部类名
——高级软件人才实作培训专家
索引器
� C#中提供了按照索引器进行访问的方法
� 定义索引器的方式:string this[int index]{get { return ""; }set { }}
,string为索引器的类型,[]中是参数列表。进行索引器写操作就
是调用set代码块,在set内部使用value得到用户设置的值;进行
读操作就执行get代码块。
� 索引器参数可以不止一个,类型也不限于int,几乎可以是任意类
型。
——高级软件人才实作培训专家
第一个Windows程序
�WinForm:Windows Form,.Net中用来开发Windows窗口程
序的技术,无论是之前学的控制台程序,还是后面要学的
ASP.Net都是调用.Net框架,因此所有知识点都是一样的。
�新建一个Windows项目:Windows→Windows窗体应用程序
�控件:窗口上很多元素都是相似的,因此将这些元素抽象为
一些类,这些类就叫做控件。识别PowerPoint中的控件,按钮
(Button)、文本框(TextBox)、标签(Label)、单选按钮
(RadioButton)、复选框(CheckBox)。
�添加、删除、移动、缩放控件
——高级软件人才实作培训专家
WinForm概念
� 拖放控件,输入姓名,点击按钮,窗口标题显示问好。设
置窗口对象的属性就可以改变窗口的外观。
� 点击按钮调用TextBox的Hide方法,调用控件的方法就可
以使得控件发生动作。
� 当用户点击按钮的时候Button1_click方法被调用,这个方
法不是程序员调用的,而是程序员把方法写好,并且说明“
当用户点击按钮的时候执行Button1_click方法中的代码”,
这一点和控制台程序不同。这被称为“好莱坞原则”:不要
找我,我会找你(Don't call me,I will call you )
� 控件、属性、事件、事件处理方法、控件的名字(控件的
实例;对象名)
——高级软件人才实作培训专家
简单的WinForm程序
� 简单的加法计算器,用户在文本框1、2中输入两个数,点击按钮,在文本框3中
显示两个数的和。如果1或者2为错误的数据格式,则弹出对话框提示错误。
int.TryParse、MessageBox.Show。 string s = string.Format("{0}你好",
textBox1.Text);//推荐
� 练习1:输入宽和高,输出面积。
� 练习2:输入Email地址,输出用户名和域名。
� 练习3:用户在文本框1、2中输入两个数,点击按钮,在文本框3中显示从文本框
1中的数字到文本框2中数字之间的累加和。如果1或者2为错误的数据格式,则弹
出对话框提示错误。如果文本框1中的数字比文本框2中数字大,则提示错误。
� 练习4:页面上有一张图片(PictureBox,在Image属性中加载图片),默认是隐藏
的(Visible=False),用户在文本框中输入身份证号
(131226198105223452),点击按钮,如果年龄大于18岁则显示图片
(Visible=True),否则提示年龄太小。取当前年份:DateTime.Now.Year。
� 练习5:页面上有一个文本框,文本框左侧和右侧各有一个按钮,点击左侧按钮
文本框中的文字向左循环滚动一次,点击右侧按钮文本框中的文字向右循环滚动
一次。
——高级软件人才实作培训专家
TextBox
文本框的几种模式:Multiline(多行)、PasswordChar(密码)
将文本框的PasswordChar设为*就是密码框效果,将MultiLine属性设
置为true并且将高度拉到合适的大小就是多行效果,
textBox4.AppendText("hello"+"\n")就是附加一行。
控件名要有含义、控件名前缀的“潜规则”。按钮Button:btn;文本框
TextBox:txt;复选框CheckBox:cb。控件的名字要有意义。
案例1:登录界面。登录错误三次退出程序,假设用户名、密码是
admin、888888,不区分大小写。(易错点:局部变量与类变量)
退出程序this.Close()或者Application.Exit()
案例2:修改密码。界面上有旧密码、新密码、重复新密码,假设旧
密码为888888,两次输入的新密码必须和旧密码不一样,并且两
次输入的新密码必须一致。
案例3:在多行文本框中输入多行“姓名=成绩”格式的数据,要求输出
成绩最高的学生的姓名和成绩。
——高级软件人才实作培训专家
ComboBox
� SelectedIndex :选中项的序号。没有任何选中的时候是-1
,否则是选中的序号(0开始)
� 练习1:简单的四则运算器
� 如何禁止用户编辑?三种风格。
� 响应选择改变事件
� 练习2:省市选择器
� 练习3:日月选择器,假设2月份总是28天。1、3、5、7、
8、10、12月份是31天,其他是30天。表驱动。
——高级软件人才实作培训专家
ListBox
� ListBox:SelectedIndex、Items、SelectedIndexChanged
事件。
� 多选的方式,设置SelectionMode为MultiExtend
� ListBox:SelectedIndices、SelectedItem、SelectedItems
、SelectionMode;
� 案例:人员选择,左边选择到右边、右边退回左边、批量
添加。遇到的问题,删除顺序,计算机的思维。
� 问题:删除自动生成的事件代码。先在事件视图中删除方
法名,再到代码中删除;先删除form.cs中的,再去手动删
除designer.cs中。
——高级软件人才实作培训专家
计时器Timer
� Timer。每隔一段时间触发一个事件。不可视控件。Inerval
、Enabled。Tick事件。
� 计量单位:ms(毫秒)。 1秒=1000毫秒
� DateTime
� 案例:小时钟。取当前时间DateTime.Now.ToString();
� 案例:走马灯
� 案例:QQ消息窗口。如何显示其他窗口。
——高级软件人才实作培训专家
右下角提示信息窗口
�Windows坐标系:左上角为原点;窗口的
Left值为窗口左上角的横坐标,Top值为
窗口左上角的纵坐标;窗口的Width为宽
度,Width为高度。
�取得屏幕工作区
Screen.GetWorkingArea(this)
�将窗口显示在右下角,简单的数学运算。
——高级软件人才实作培训专家
滑动提示窗口
�创建一个Timer,每隔一段时间修改一下
Top的值,当全部显示出来的时候禁用
Timer。
�对外提供提供SlideShow(String
caption,String msg)方法
�超时自动关闭。
�滑动隐藏。Timer接力。
�鼠标点击则取消“超时自动隐藏”。
——高级软件人才实作培训专家
树状结构数据
——高级软件人才实作培训专家
TreeView控件
� 树的基本概念:父节点、子节点、兄弟节点、根节点
� 编辑节点,节点名字Name,节点文字Text
� 动态添加节点(VS编辑界面中有增加根节点、增加子节点两个
按钮):
• 向根节点下增加子节点:treeView.Nodes.Add,它的返回值
就是创建的节点对象。treeView.Nodes代表根节点的所有子
节点。
• 向TreeNode增加子节点,treeNode.Nodes.Add,它的返回
值就是创建的节点对象。treeNode.Nodes代表节点的所有子
节点。
——高级软件人才实作培训专家
练习:构建省市县三级树
�首先treeView.Nodes.Add添加省节
点。并且把添加的节点TreeNode对
象放到treeNodeLiaoning等变量中
� 向treeNodeLiaoning等省级节点下
添加市节点,并且把添加的节点
TreeNode对象放到
treeNodeShenYang等变量中
� 向treeNodeShenYang等市节点下
增加区县节点。
——高级软件人才实作培训专家
TreeView深入
�选择项发生变化的时候在TextBox中显示当前
选择项的值。AfterSelect事件。
�TreeNode的Tag,TreeNode中Text只能盛放
显示的值,可以用Tag属性给节点关联一个对
象。 Tag属性是Object类型的,因此可以关联
任何的对象。案例:省市县显示当前项的邮编
�练习:选择节点的时候显示市长、人口(int)
类型。
——高级软件人才实作培训专家
容器控件
�GroupBox
�Panel
�TabControl(增删Tab页,设定激活的
页)
——高级软件人才实作培训专家
其他常用控件
�RadioButton:Checked。CheckedChanged
和Click事件的区别
�CheckBox
�CheckedListBox
�DateTimePicker。
�PictureBox
�作业:开发注册页面。数据合法性判断:
Email、密码强度实时显示。带协议、同意
协议CheckBox。
——高级软件人才实作培训专家
文件对话框
� 打开文件对话框 OpenFileDialog
� 两种创建方式:可视化拖放、new
� 显示对话框的方式:ShowDialog
� ShowDialog的返回值DialogResult类型
� 通过FileName属性得到选择的文件名
� 属性:Title、InitialDirectory
� 文件过滤器 Filter:文本文件|*.txt|All|*.*
�SaveFileDialog。OpenFileDialog相同的
成员:Title、ShowDialog、FileName等
——高级软件人才实作培训专家
列表(非范型)
� 数组的局限性:无法对数据中的数据进行动态的增删。
� ArrayList(列表)。Add、Clear、Contains、Count、
IndexOf、Insert、Remove、RemoveAt、Reverse、Sort
、索引器。
� 作业1:输入整数,然后反序输出
� 作业2:两个列表的连接、合并。
� 作业3:分拣奇偶数,奇数在左,偶数在右,面试题
——高级软件人才实作培训专家
Hashtable
�简繁体翻译,为什么效率这么高
�HashSet
——高级软件人才实作培训专家
范型
�用ArrayList的麻烦的地方:数据放进去就
不知道是什么类型的了;不能防止非法类
型数据的放入;将ArrayList返回给其他函
数,会令调用者很困惑。
�List<int> 除此除外并无不同。
� IEnumerable<int>、ICollection<int>
�除了List类外,还有很多类支持范型,比
如Dictionary<K,V>等,待定的类型还可
以不止一个。简繁体翻译器。
——高级软件人才实作培训专家
Dictionary
�Key-value Pair 键值对
�作业:Dictionary性能测试
�Dictionary<K,V>:
•Add:添加,如果重复,则报错
•索引器:可以重复设置,即使不存在也没关系
,如果重复则保留最后一次的值
•ContainsKey,判断是否存在这个Key
——高级软件人才实作培训专家
对话框、字符串、数组综合案例
选择成绩文件。计算平均分,查找某个学生
的成绩。File.ReadAllLines
——高级软件人才实作培训专家
菜单、工具栏
�主菜单(MenuStrip):分割线、快捷键、图标、子菜
单、事件响应。
�右键菜单(ContextMenuStrip)
�工具栏ToolStrip
�状态栏 StatusStrip
——高级软件人才实作培训专家
菜单工具栏案例
�案例:自己动手写记事本。打开、保存、
另存为、退出、剪切、复制、粘贴
�带工具栏
�练习:标题显示文件名
�练习:状态栏中显示当前时间
——高级软件人才实作培训专家
调试(*理解)Debug
�暂停(不知道程序现在运行到哪里了)
�断点、设置断点 breakpoint
�条件断点
�命中次数断点
�查看变量的值,查看表达式的值。红色、
黑色
——高级软件人才实作培训专家
变量作用域
变量名:变量名就像试验实例容器的编号,在一个实验室中,编号不能
重复。如果去了更高一级的实验室,就不能和下属的实验室的容易编号
重复。只要不出实验室,不同实验室之间的容器编号可以重复。
        static void Main(string[] args)
        {
            string name = "tom";
            SayHello();
        }
        static void SayHello()
        {
            Console.WriteLine("我的姓名是:
{0}",name);
        }
        static void Main(string[] args)
        {
            string name = "tom";
            SayHello();
        }
        static void SayHello()
        {
            string name = "jerry";
            Console.WriteLine("我的姓名是:
{0}",name);
        }
——高级软件人才实作培训专家
变量作用域2
            string name = "tom";
            if (name == "tom")
            {
                string name = "jerry";
            }
            for (int i = 0; i < 10; i++)
            {
                string name =
i.ToString();
            }
           
Console.WriteLine("{0}",name);
            for (int i = 0; i < 10; i++)
            {
                string name =
i.ToString();
            }           
Console.WriteLine("{0}",i);
            int i;
            for (i = 0; i < 10; i++)
            {
                string name = i.ToString();
            }
            Console.WriteLine("{0}",i);
        static void SayHello(string name)
        {
            string name = "lily";
            Console.WriteLine("我是{0}",name);
        }
在同一个括号内变量定义不能重名,括
号可以嵌套,但是通过函数的调用并不
在这个范围内
            int i = 3;
            if (i > 3)
            {
                if (i < 100)
                {
                    int i = 10;
                }
            }
            if (s=="a")
            {
                int i = 0;
            }
            if (s=="b")
            {
                int i = 0;
            }

看完扫码免费领红包

传智播客 传智播客.NET视频学习课件相关推荐

  1. 传智播客传智汇与华为联合举办主题沙龙,解读网络安全解决方案

    2018年6月24日,传智播客旗下IT 互联网精英社区"传智汇"联合华为举办的"网络安全解决方案主题沙龙"在北京中关村顺利召开. 传智播客传智汇运营总监王平.华 ...

  2. 适合开车收听的播客_收听播客和学习如何创建自己的最佳网站

    适合开车收听的播客 Podcasts, or webcasts, are shows about many different topics that are broadcast over the w ...

  3. 江西智汇网络推客SCRM智能获客系统客户倍增的全员营销系统

    江西智汇网络推客SCRM智能获客系统客户倍增的全员营销系统品牌官网 裂变商城 寻客雷达 老板雷达 员工管理 客户管理CRM智能客服 超级会员 支付扫码 文章海报拓客 人工智能名片 短视频直播 电话:1 ...

  4. 在线客服系统访客发送录音功能,在elementui中使用js-audio-recorder实现录音功能,然后上传文件发送出去...

    访客在聊天界面中可以发送语音,其实就是录音以后,调用上传接口,把录音文件发送给客服. 点击麦克图标以后,展示出一个elementui的dialog弹窗,里面展示四个功能按钮. 分别是,开始录音,结束录 ...

  5. 被吐槽“智障客服”的智能客服,现在怎么样了?

    伴随AI.5G等新技术带来的变革,客户服务场景发生了多元的变化,千亿级别的企业客服市场正迎来新挑战与新变革.传统客服向智能客服升级转型是必然趋势,如何为企业降本提效,如何开拓新的增量市场,将是未来客服 ...

  6. 【网站搭建】搭建独立域名博客 -- 独立域名博客上线了 www.hanshuliang.com

    博客是安装在阿里云的服务器上. 小结 : -- 进入数据库命令 :mysql -uroot -p123456 ; -- 检查nginx配置语法 :.../nginx/sbin/nginx -t; -- ...

  7. IT-标准化-系列-14.用-博客三剑客-写博客

    有人说写博客-说写吧! 那有博客三剑客 下面我来介绍: 剑客 1:红蜻蜓抓图精灵-截图利器 剑客 2:Windows Live Writer-写作利器 剑客 3:Batch Photo WaterMa ...

  8. 我在博客园写博客的原因

    我为什么会在cnblogs上写博客.. CSDN上我上传过代码被很多网友下载过.CSDN我申请过博客.也写过几篇博客. 开源中国 我上传过代码.代码也被网友下载过.OSChina我申请过博客.也写过几 ...

  9. antd upload手动上传_SpringBoot 如何上传大文件?

    最近遇见一个需要上传超大大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...

最新文章

  1. 原生CSS设置预加载图片之前的默认背景图
  2. 关于分页的一些经验。
  3. 南瑞变压器保护装置说明书_深圳宝安变压器维修公司
  4. 【机器学习】——纯Python建立BP模型
  5. geek_愚蠢的怪胎技巧:在Windows 7中启用秘密的“ How-To Geek”模式
  6. KubeCon+CloudNativeCon首秀中国!
  7. python内置函数多少个_每个数据科学家都应该知道的10个Python内置函数
  8. cf723d Lakes in Berland
  9. web跨域问题解决方案
  10. Android小知识-剖析OkHttp中的五个拦截器(上篇)
  11. 数据库中数据数据初始化的好处
  12. 中国AI专利数稳居第一!世界各国AI专利深度盘点
  13. 识别中文_文字的效率:中英韩日四国文字识别效率对比,中文遥遥领先
  14. 标题:深度分销的方向和尺度 内容:Pnbsp;深度分销的方向和尺度BRnbsp;nbsp; 所谓深度分销,有人也称之为通路精耕细作,是通过减少原有渠道层次,并增强中间商分销能力或通过企
  15. 如何使用思维导图做计划?这样绘制思维导图的方法你使用过吗?
  16. python用matplotlib画五角星_3.用Python画五角星
  17. 3D卷积“LP-3DCNN: Unveiling Local Phase in 3D Convolutional Neural Networks”
  18. HDU5015 233 Matrix
  19. 线性系统粗浅认识——第五次作业
  20. asp毕业设计——基于vb+VB.NET+SQL Server的图书馆管理信息系统设计与实现(毕业论文+程序源码)——图书馆管理信息系统

热门文章

  1. 【Darknet】改进版Darknet
  2. SOM-TL138Linux SD系统启动卡制作方法
  3. 阿里云天池大赛工业蒸汽预测学习(3)
  4. Oracle 12c OCM大师认证直考Hands on过程解析
  5. gazebo打不开一直卡在Preparing your world
  6. 汽车胎压监测(TPMS)系统为何用蓝牙?
  7. linux 命令行封装,自己封装Linux命令行万能解压命令
  8. 紧急:EIMS安全补丁,大家快补
  9. 三维地图制作 数据选型 相关参考资料
  10. 多用户管理系统--登录(1)