.NET 基础 一步步 一幕幕 [.NET基础知识点]
.NET基础知识点
l .Net平台 .Net FrameWork框架
l .Net FrameWork框架提供了一个稳定的运行环境,;来保障我们.Net平台正常的运转
l 两种交互模式
- C/S:要求客户的电脑上必须要安装一个客户端:qq、360、快播等.....
- B/S:要求客户的电脑上只需要安装一个浏览器
l 书写代码需要注意的地方:
n 代码中出现的所有标点都是英文半角 shift键快速切换中文半角和英文半角
n shift+空格切换全角/半角
n 在c#代码中,每行代码的结束,我们都以分号结束,注意:这个分号也是英文半角的分号。
n Console.WriteLine("要打印的内容");
n Console.ReadKey(); 暂停当前程序,等待用户按下任意键继续,按下的任意键将显示在我们的控制台当中
l 注释符:
n 1)、注销
n 2)、解释
l C#的3种注释符:
n 1)、单行注释 //
n 2)、多行注释 /*要注释的内容*/
n 3)、文档注释 /// 多用来解释类或者方法
l 常量
n 声明的常量的语法:
n const 变量类型变量名=值;
l 变量:用来在计算机当中存储数据:
n 变量类型int double string char bool decimal
n 声明并且给变量赋值的简写形式:
u 变量类型变量名=值;
n 变量的使用规则:
u 如果你要是用变量的话,应该要先声明再赋值再使用。
n 给变量起名字的时候要满足两个命名规范:
u 1、Camel 骆驼命名规范。要求变量名首单词的首字母要小写,其余每个单词的首字母要大写。
u 多用于给变量命名。
u 2、Pascal 命名规范:要求每个单词的首字母都要大写,其余字母小写。多用于给类或者方法命名。
u HighSchoolStudent
u highSchoolStudent
n 变量的作用域:
u 变量的作用域就是你能够使用到这个变量的范围。
u 变量的作用域一般从声明它的那个括号开始到那个括号所对应的结束的括号结束。
u 在这个范围内,我们可以访问并使用变量。超出这个范围就访问不到了
l 数据类型:
n 1)、整数类型:int 只能存储整数,不能存储小数。
n 2)、小数类型:double 既能存储整数,也能存储小数,小数点后面的位数 15~16位。
n 3)、金钱类型:decimal:用来村粗金钱,值后面需要加上一个m.
n 4)、字符串类型:string,用来存储多个文本,也可以存储空,字符串类型的值需要被双引号引来,
n 这个双引号必须是英文半角状态下的双引号
n 5)、字符类型:char,用来存储单个字符,最多、最少只能有一个字符,不能存储空。
n 字符类型的值需要用单引号因起来。英文半角状态下的单引号。
l 波浪线
n 1)、如果你的代码中出现了红色的波浪线,意味着你的代码中出现了语法错误。
n 2)、如果你的代码中出现了绿色的波浪线,说明你的代码语法并没有错误,
n 只不过提示你有可能会出现错误,但是不一定会出现错误。警告
l 命名规则:
n ****首先要保证的就是这个变量的名字要有意义。
n 1 现阶段给变量起名字的时候都以字母开头
n 2 后面可以跟任意“字母”、数字、下划线.
n 注意:
u 1)你起的变量名不要与c#系统中的关键字重复.
u 2)在c#中,大小写是敏感的. HTML
u 3)同一个变量名不允许重复定义(先这么认为,不严谨)
l 赋值运算符
n =:表示赋值的意思,表示把等号右边的值,赋值给等号左边的变量。
n 由等号连接的表达式称之为赋值表达式。
n 注意:每个表达式我们都可以求解除一个定值,对于赋值表达式而言,等号左边的变量的值,
n 就是整个赋值表达式的值。
n int number=10;
l +号的作用
n 1)、连接:当+号两边有一边是字符串的时候,+号就起到连接的作用。
n 2)、相加:两边是数字的时候
l 占位符
n 使用方法:先挖个坑,再填个坑。
n 使用占位符需要注意的地方:
n 1、你挖了几个坑,就应该填几个坑,如果你多填了,没效果。
n 如果你少填了,抛异常。
n 2、输出顺序:按照挖坑的顺序输出。
l 异常
n 异常是指:语法上并没有任何错误,只不过在程序运行的期间,由于某些原因出现了问题,
n 使程序不能再正常的运行。
l 转义符
n 转义符指的就是一个'\'+一个特殊的字符,组成了一个具有特殊意义的字符。
n \n:表示换行
n \":表示一个英文半角的双引号
n \t:表示一个tab键的空格
n \b:表示一个退格键,放到字符串的两边没有效果。
n \r\n:windows操作系统不认识\n,只认识\r\n
n \\:表示一个\
n
n @符号
n 1、取消\在字符串中的转义作用,使其单纯的表示为一个'\'
n 2、将字符串按照编辑的原格式输出
l 算数运算符
n +
n -
n *
n /
n %
l 类型转换
n 隐式类型转换:
n 我们要求等号两遍参与运算的操作数的类型必须一致,如果不一致,满足下列条件会发生
u 自动类型转换,或者称之为隐式类型转换。
u 两种类型兼容
u 例如:int 和 double 兼容(都是数字类型)
u 目标类型大于源类型
u 例如:double > int 小的转大的
n 显示类型转换:
u 1、两种类型相兼容 int--double
u 2、大的转成小的 double----int
n 语法:
u (待转换的类型)要转换的值;
n
n 总结:
u 自动类型转换:int---->doublec 小的转大的
u 显示类型转换:double--->int 大的转小的
l Convert进行类型转换:
n 类型如果相兼容的两个变量,可以使用自动类型转换或者强制类型转换,但是,如果两个类型的变量不兼容,比如 string与int或者string 与double,这个时候我们可以使用一个叫做Convert的转换工厂进行转换。
n 注意:使用Convert进行类型转换,也需要满足一个条件:
u 面儿上必须要过的去。
l 算数运算符
n ++:分为前++和后++,不管是前++还是后++,最终的结果都是给这个变量加一。
n 区别表现表达式当中,如果是前++,则先给这个变量自身加一,然后带着这个加一后的值去参与运算。
n 如果是后++,则先拿原值参与运算,运算完成后,再讲这个变量自身加一。
n --:同上。
l 对于向加加或者减减这样只需要一个操作数就能完成的运算,我们称之为一元运算符。
l + - * / % 对于这些需要两个或以上才能完成运算的操作符,我们称之为二元运算符。
l 一元运算符的优先级要高于而元运算符。
l 如果在一个表达式当中,既有一元运算符,又有二元运算符,我们首先计算一元运算符。
l
l int number=10;
l int result=10 + ++number;
l 关系运算符
n >
n <
n >=
n <=
n ==
n !=
n 关系运算符是用来描述两个事物之间的关系
n 由关系运算符连接的表达式称之为关系表达式。
l bool类型
n 在c#中我们用bool类型来描述对或者错。
n bool类型的值只有两个一个true 一个false
l 逻辑运算符
n && 逻辑与
n ||逻辑或
n !逻辑非
n 又逻辑运算符连接的表达式叫做逻辑表达式
n 逻辑运算符两边放的一般都是关系表达式或者bool类型的值。
n 5>3 &&true
n 3>5||false
n !表达式
n 逻辑表达式的结果同样也是bool类型
l 复合赋值运算符
n int number=10;
n += :
n number+=20;
n number=number+20;
n -=
n number-=5;
n number=number-5;
n *=
n number*=5;
n number=number*5;
n /=
n %=
l 三元表达式
n 语法:
u 表达式1?表达式2:表达式3;
n 表达式1一般为一个关系表达式。
n 如果表达式1的值为true,那么表达式2的值就是整个三元表达式的值。
n 如果表达式1的值为false,那么表达式3的值就是整个三元表达式的值。
n 注意:表达式2的结果类型必须跟表达式3的结果类型一致,并且也要跟整个三元表达式的结果类型一致。
l if语句:
n 语法:
u if(判断条件)
u {
u 要执行的代码;
u }
n 判断条件:一般为关系表达式或者bool类型的值。
n 执行过程:
u 程序运行到if处,首先判断if所带的小括号中的判断条件,
u 如果条件成立,也就是返回true,则执行if所带的大括号中的代码,
u 如果判断条件不成立,也就是返回一个false。则跳过if结构,继续向下执行。
n
n if结构的特点:先判断,再执行,有可能一行代码都不执行
n 用于一种情况的判断。
l if-else
n 语法:
u if(判断条件)
u {
u 执行的代码;
u }
u else
u {
u 执行的代码
u }
n 执行过程:
u 程序执行到if处,首先判断if所带的小括号中的判断条件是否成立,
u 如果成立,也就是返回一个true,则执行if所带的大括号中的代码,
u 执行完成后,跳出if-else结构。
u 如果if所带的小括号中的判断条件不成立,也就是返回一个false,
u 则跳过if语句,执行else所带的大括号中的语句,执行完成后,跳出if-else结构。
n
n if-else特点:先判断,再执行,最少都要执行一条代码。
n 用于两种情况的判断
n 注意:else永远跟离它最近的那个if配对
l if else-if
n 作用:用来处理多条件的区间性的判断。
n 语法:
u if(判断条件)
u {
u 要执行的代码;
u }
u else if(判断条件)
u {
u 要执行的代码;
u }
u else if(判断条件)
u {
u 要执行的代码;
u }
u else if(判断条件)
u {
u 要执行的代码;
u }
u ........
u else
u {
u 要执行的代码;
u }
n 执行过程;
u 程序首先判断第一个if所带的小括号中的判断条件,如果条件成立,也就是返回一个true,
u 则执行该if所带的大括号中的代码,执行完成后,立即跳出if else-if结构。
u 如果第一个if所带的判断条件不成立,也就是返回一个false,则继续向下进行判断,依次的判断每一个if所带
u 的判断条件,如果成立,就执行该if所带的大括号中的代码,如果不成立,则继续向下判断,
u 如果每个if所带的判断条件都不成立,就看当前这个if else-if结构中是否存在else。
u 如果有else的话,则执行else中所带的代码,如果没有else,则整个 if-else if神马都不做。
u else可以省略。
l 异常捕获
n 我们在程序中经常会出现各种各样的异常,你如果想要你的程序变得坚强一些。
n 在你的代码中应该经常性的使用try-catch来进行异常捕获。
n
n 哪行代码有可能出现异常,你就踹它一脚。
n 语法:
u try
u {
u 可能会出现异常的代码;
u ....
u ...
u ...
u }
u //try和catch之间不能有其他的代码
u catch
u {
u 出现异常后要执行的代码;
u }
n
n 执行过程:如果try中的代码没有出现异常,那么catch中的代码不会执行。
n 如果try中的代码出现了异常,那怕这行出现异常的代码后面还有一百行都不会执行了,
n 而是直接跳到catch中执行代码
l switch-case
n 用来处理多条件的定值的判断。
n 语法:
u switch(变量或者表达式的值)
u {
u case 值1:要执行的代码;
u break;
u case 值2:要执行的代码;
u break;
u case 值3:要执行的代码;
u break;
u ..........
u default:要执行的代码;
u break;
u }
n 执行过程:
u 程序执行到switch处,首先将括号中变量或者表达式的值计算出来,
u 然后拿着这个值依次跟每个case后面所带的值进行匹配,一旦匹配成功,则执行
u 该case所带的代码,执行完成后,遇到break。跳出switch-case结构。
u 如果,跟每个case所带的值都不匹配。就看当前这个switch-case结构中是否存在
u default,如果有default,则执行default中的语句,如果没有default,则该switch-case结构什么都不做。
l 循环结构
n while循环:
u while(循环条件)
u {
u 循环体;
u }
n 执行过程:
u 程序运行到while处,首先判断while所带的小括号内的循环条件是否成立,
u 如果成立的话,也就是返回一个true,则执行循环体,执行完一遍循环体后,再次回到
u 循环条件进行判断,如果依然成立,则继续执行循环体,如果不成立,则跳出while循环。
u 在while循环当中,一般总会有那么一行代码,能够改变循环条件,使之终有一天不再成立,
u 如果没有那么一行代码能够改变循环条件,也就是循环条件永远都成立,我们称之这种循环叫做死循环。
u 最简单的最常用的死循环:
l while(true)
l {
l
l }
n 特点:先判断,再执行,有可能一遍循环都不执行。
l do-while循环。
n 语法:
u do
u {
u 循环体;
u }while(循环条件);
n 执行过程:程序首先会执行do中的循环体,执行完成后,去判断do-while循环的循环条件,
n 如果成立,则继续执行do中的循环体,如果不成立,则跳出do-while循环。
n 特点:先循环,再判断,最少执行一遍循环体。
l for循环
n 语法:
u for(表达式1;表达式2;表达式3)
u {
u 循环体;
u }
n 表达式1一般为声明循环变量,记录循环的次数(int i=0;)
n 表达式2一般为循环条件(i<10)
n 表达式3一般为改变循环条件的代码,使循环条件终有一天不再成立(i++)。
n 执行过程:
u 程序首先执行表达式1,声明了一个循环变量用来记录循环的次数,
u 然后执行表达式2,判断循环条件是否成立,如果表达式2返回的结果为true,
u 则执行循环体。当执行完循环体后,执行表达式3,然后执行表达式2继续判断循环条件是否成立,
u 如果成立则继续执行循环体,如果不成立,则跳出for循环。
l break
n 1)、可以跳出switch-case结构。
n 2)、可以跳出当前循环。
n break一般不单独的使用,而是跟着if判断一起使用,表示,当满足某些条件的时候,就不再循环了。
l 程序调试
n 1)、写完一段程序后,想看一下这段程序的执行过程。
n 2)、当你写完这段程序后,发现,程序并没有按照你想象的样子去执行。
n
n 调试方法:
u 1)、F11逐语句调试(单步调试)
u 2)、F10逐过程调试
u 3)、断点调试
l int.TryParse int.parse 尝试着将一个字符串转换成int类型。
l 枚举
n 语法:
u 访问修饰符enum 枚举名
u {
u 值1,
u 值2,
u 值3,
u ........
u }
n enum:关键字,声明枚举的关键字
n 枚举名:要符合Pascal命名规范
n
n 将枚举声明到命名空间的下面,类的外面,表示这个命名空间下,所有的类都可以使用这个枚举。
n
n 枚举就是一个变量类型,int--double string decimal.
n 只是枚举声明、赋值、使用的方式跟那些普通的变量类型不一样。
n 我们可以将一个枚举类型的变量跟int类型和string类型互相转换。
n 枚举类型默认是跟int类型相互兼容的,所以可以通过强制类型转换的语法互相转换。
n 当转换一个枚举中没有的值的时候,不会抛异常,而是直接将数字显示出来。
n 枚举同样也可以跟string类型互相转换,如果将枚举类型转换成string类型,则直接调用ToString().
n 如果将字符串转换成枚举类型则需要下面这样一行代码:
n (要转换的枚举类型)Enum.Parse(typeof(要转换的枚举类型),"要转换的字符串");
n 如果转换的字符串是数字,则就算枚举中没有,也会不会抛异常。
n 如果转换的字符串是文本,如果枚举中没有,则会抛出异常。
l 结构
n 可以帮助我们一次性声明多个不同类型的变量。
n 语法:
u [public] struct 结构名
u {
u 成员;//字段
u }
n 变量在程序运行期间只能存储一个值,而字段可以存储多个值。
l 数组
n 一次性存储多个相同类型的变量。
n 语法:
n 数组类型[] 数组名=new 数组类型[数组长度];
n
n ***数组的长度一旦固定了,就不能再被改变了
l 冒泡排序:就是将一个数组中的元素按照从大到小或者从小到大的顺序进行排列。
n int[] nums={9,8,7,6,5,4,3,2,1,0}; 0 1 2 3 4 5 6 7 8 9
n 第一趟比较:8 7 6 5 4 3 2 1 0 9 交换了9次 i=0j=nums.Length-1-i
n 第二趟比较:7 6 5 4 3 2 1 0 8 9 交换了8次 i=1j=nums.Length-1-i
n 第三趟比较:6 5 4 3 2 1 0 7 8 9 交换了7次 i=2j=nums.Length-1-i
n 第四趟比较:5 4 3 2 1 0 6 7 8 9 交换了6次 i=3j=nums.Length-1-i
n 第五趟比较:4 3 2 1 0 5 6 7 8 9 交换了5次
n 第六趟比较:3 2 1 0 4 5 6 7 8 9 交换了4次
n 第七趟比较:2 1 0 3 4 5 6 7 8 9 交换了3次
n 第八趟比较:1 0 2 3 4 5 6 7 8 9 交换了2次
n 第九趟比较:0 1 2 3 4 5 6 7 8 9 交换了1次
n for(int i=0;i<number.Length-1;i++)
n {
n for(int j=0;j<nums.Length-1-i;j++)
n {
n if(nums[j]>nums[j+1])
n {
n int temp=nums[j];
n nums[j]=nums[j+1];
n nums[j+1]=temp;
n }
n }
n }
l 方法
n 函数就是将一堆代码进行重用的一种机制。
n 函数的语法:
u [public] static 返回值类型方法名([参数列表])
u {
u 方法体;
u }
u public:访问修饰符,公开的,公共的,哪都可以访问。
u static:静态的
u 返回值类型:如果不需要写返回值,写void
u 方法名:Pascal 每个单词的首字母都大些。其余字母小写
u 参数列表:完成这个方法所必须要提供给这个方法的条件。如果没有参数,小括号也不能省略。
u
u 方法写好后,如果想要被执行,必须要在Main()函数中调用。
u 方法的调用语法:
u 类名.方法名([参数]);
u ***在某些情况下,类名是可以省略的,如果你写的方法跟Main()函数同在一个类中,这个时候,
u 类名可以省略。
n 方法的功能一定要单一。
u GetMax(int n1,int n2)
u 方法中最忌讳的就是出现提示用户输入的字眼。
l return
n 1、在方法中返回要返回的值。
n 2、立即结束本次方法。
l 我们在Main()函数中,调用Test()函数,
n 我们管Main()函数称之为调用者,
n 管Test()函数称之为被调用者。
n 如果被调用者想要得到调用者的值:
u 1)、传递参数。
u 2)、使用静态字段来模拟全局变量。
n 如果调用者想要得到被调用者的值:
u 1)、返回值
l 不管是实参还是形参,都是在内存中开辟了空间的。
l out、ref、params
n 1)、out参数。
u 如果你在一个方法中,返回多个相同类型的值的时候,可以考虑返回一个数组。
u 但是,如果返回多个不同类型的值的时候,返回数组就不行了,那么这个时候,
u 我们可以考虑使用out参数。
u out参数就侧重于在一个方法中可以返回多个不同类型的值。
n
n 2)、ref参数
u 能够将一个变量带入一个方法中进行改变,改变完成后,再讲改变后的值带出方法。
u ref参数要求在方法外必须为其赋值,而方法内可以不赋值。
n
n 3)、params可变参数
u 将实参列表中跟可变参数数组类型一致的元素都当做数组的元素去处理。
u params可变参数必须是形参列表中的最后一个元素。
l 方法的重载
n 概念:方法的重载指的就是方法的名称相同给,但是参数不同。
n 参数不同,分为两种情况
u 1)、如果参数的个数相同,那么参数的类型就不能相同。
u 2)、如果参数的类型相同,那么参数的个数就不能相同。
u ***方法的重载跟返回值没有关系。
l 方法的递归
n 方法自己调用自己。
n 找出一个文件夹中所有的文件。
l 面向过程-----> 面向对象
l
l 面向过程:面向的是完成这件事儿的过程,强调的是完成这件事儿的动作。
l 类
n 语法:
u [public] class 类名
u {
u 字段;
u 属性;
u 方法;
u }
n 写好了一个类之后,我们需要创建这个类的对象,
n 那么,我们管创建这个类的对象过程称之为类的实例化。
n 使用关键字 new.
n
n this:表示当前这个类的对象。
n 类是不占内存的,而对象是占内存的。
l 属性
n 属性的作用就是保护字段、对字段的赋值和取值进行限定。
n 属性的本质就是两个方法,一个叫get()一个叫set()。
n 既有get()也有set()我们诚之为可读可写属性。
n 只有get()没有set()我们称之为只读属性
n 没有get()只有set()我们称之为只写属性
n
n Field字段
n Method方法
n Property属性
n
n ****字段就是女人 属性才是男人。
l 访问修饰符:
访问修饰符 |
说明 |
public |
公有访问。不受任何限制。 |
private |
私有访问。只限于本类成员访问,子类,实例都不能访问。 |
protected |
保护访问。只限于本类和子类访问,实例不能访问。 |
internal |
内部访问。只限于本项目内访问,其他不能访问。 |
protected internal |
内部保护访问。只限于本项目或是子类访问,其他不能访问 |
l 当我们创建好一个类的对象后,需要给这个对象的每个属性去赋值。我们管这个过程称之为对象的初始化。
l 静态和非静态的区别
n 1)、在非静态类中,既可以有实例成员,也可以有静态成员。
n 2)、在调用实例成员的时候,需要使用对象名.实例成员;
n 在调用静态成员的时候,需要使用类名.静态成员名;
n 总结:静态成员必须使用类名去调用,而实例成员使用对象名调用。
n 静态函数中,只能访问静态成员,不允许访问实例成员。
n 实例函数中,既可以使用静态成员,也可以使用实例成员。
n 静态类中只允许有静态成员,不允许出现实例成员。
n
n 使用:
n 1)、如果你想要你的类当做一个"工具类"去使用,这个时候可以考虑将类写成静态的。
n 2)、静态类在整个项目中资源共享。
n 只有在程序全部结束之后,静态类才会释放资源。
l
l
l 堆 栈 静态存储区域
l
l 释放资源。GC Garbage Collection垃圾回收器
l 构造函数
n 作用:帮助我们初始化对象(给对象的每个属性依次的赋值)
n 构造函数是一个特殊的方法:
u 1)、构造函数没有返回值,连void也不能写。
u 2)、构造函数的名称必须跟类名一样。
n
n 创建对象的时候会执行构造函数
n 构造函数是可以有重载的。
n ***
n 类当中会有一个默认的无参数的构造函数,当你写一个新的构造函数之后,不管是有参数的还是
n 无参数的,那个默认的无参数的构造函数都被干掉了。
l new关键字
n Person zsPerson=new Person();
n new帮助我们做了3件事儿:
u 1)、在内存中开辟一块空间
u 2)、在开辟的空间中创建对象
u 3)、调用对象的构造函数进行初始化对象
n 1)、创建对象
n 2)、隐藏从父类那里继承过来的同名成员。
n 隐藏的后果就是子类调用不到父类的成员。
l this关键字
n 1)、代表当前类的对象
n 2)、在类当中显示的调用本类的构造函数 :this
l 命名空间
n 可以认为类是属于命名空间的。
n 如果在当前项目中没有这个类的命名空间,需要我们手动的导入这个类所在的
n 命名空间。
u 1)、用鼠标去点
u 2)、alt+shift+F10
u 3)、记住命名空间,手动的去引用
l 值类型和引用类型
l 区别:
u 1、值类型和引用类型在内存上存储的地方不一样。
u 2、在传递值类型和传递引用类型的时候,传递的方式不一样。
u 值类型我们称之为值传递,引用类型我们称之为引用传递。
n 我们学的值类型和引用类型:
u 值类型:int、double、bool、char、decimal、struct、enum
u 引用类型:string、自定义类、数组
n 存储:
u 值类型的值是存储在内存的栈当中。
u 引用类型的值是存储在内存的堆中。
n 值类型在复制的时候,传递的是这个值得本身。
n 引用类型在复制的时候,传递的是对这个对象的引用。
l 字符串
n 1)、字符串的不可变性
n 当你给一个字符串重新赋值之后,老值并没有销毁,而是重新开辟一块空间存储新值。
n 当程序结束后,GC扫描整个内存,如果发现有的空间没有被指向,则立即把它销毁。
n 2)、我们可以讲字符串看做是char类型的一个只读数组。
n ToCharArray();将字符串转换为char数组
n new string(char[] chs):能够将char数组转换为字符串
l 字符串提供的各种方法
n 1)、Length:获得当前字符串中字符的个数
n 2)、ToUpper():将字符转换成大写形式
n 3)、ToLower():将字符串转换成小写形式
n 4)、Equals(lessonTwo,StringComparison.OrdinalIgnoreCase):比较两个字符串,可以忽略大小写
n 5)、Split():分割字符串,返回字符串类型的数组。
n 6)、Substring():解决字符串。在截取的时候包含要截取的那个位置。
n 7)、IndexOf():判断某个字符串在字符串中第一次出现的位置,如果没有返回-1、值类型和引用类型在内存上存储的地方不一样。
n 8)、LastIndexOf():判断某个字符串在字符串中最后一次出现的位置,如果没有同样返回-1
n 9)、StartsWith():判断以....开始
n 10)、EndsWith():判断以...结束
n 11)、Replace():将字符串中某个字符串替换成一个新的字符串
n 12)、Contains():判断某个字符串是否包含指定的字符串
n 13)、Trim():去掉字符串中前后的空格
n 14)、TrimEnd():去掉字符串中结尾的空格
n 15)、TrimStart():去掉字符串中前面的空格
n 16)、string.IsNullOrEmpty():判断一个字符串是否为空或者为null
n 17)、string.Join():将数组按照指定的字符串连接,返回一个字符串。
l 继承
n 我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员,
n 单独的封装到一个类中,作为这些类的父类。
n Student、Teacher、Driver 子类 派生类
n Person 父类 基类
n 子类继承了父类,那么子类从父类那里继承过来了什么?
n 首先,子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。
n 问题:子类有没有继承父类的构造函数?
u 答:子类并没有继承父类的构造函数,但是。子类会默认的调用父类无参数的构造函数,
n 创建父类对象,让子类可以使用父类中的成员。
n 所以,如果在父类中重新写了一个有参数的构造函数之后,那个无参数的就被干掉了,
n 子类就调用不到了,所以子类会报错。
n 解决办法:
u 1)、在父类中重新写一个无参数的构造函数。
u 2)、在子类中显示的调用父类的构造函数,使用关键字:base()
n 继承的特性
u 1、继承的单根性:一个子类只能有一个父类。
u 2、继承的传递性
l 里氏转换
n 1)、子类可以赋值给父类
n 2)、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象。
l 子类对象可以调用父类中的成员,但是父类对象永远都只能调用自己的成员。
l IS & AS
n is:表示类型转换,如果能够转换成功,则返回一个true,否则返回一个false
n as:表示类型转换,如果能够转换则返回对应的对象,否则返回一个null
l ArrayList集合的长度问题
n 每次集合中实际包含的元素个数(count)超过了可以包含的元素的个数(capcity)的时候,
n 集合就会向内存中申请多开辟一倍的空间,来保证集合的长度一直够用。
l Hastable 键值对集合 字典 孙 sun---孙
n 在键值对集合当中,我们是根据键去找值的。
n 键值对对象[键]=值;
n *****:键值对集合当中,键必须是唯一的,而值是可以重复的
l 编码格式
n 产生乱码的原因就是因为你保存这个文件的编码格式跟你打开这个文件的编码格式不一样
l 绝对路径和相对路径
n 绝对路径:通过给定的这个路径直接能在我的电脑中找到这个文件。
n 相对路径:文件相对于应用程序的路径。
n 结论:
n 我们在开发中应该去尽量的使用相对路径。
l 装箱、拆箱
n 装箱:就是将值类型转换为引用类型。
n 拆箱:将引用类型转换为值类型。
n 看两种类型是否发生了装箱或者拆箱,要看,这两种类型是否存在继承关系。
l 将创建文件流对象的过程写在using当中,会自动的帮助我们释放流所占用的资源。
l 实现多态的手段
n 1)、虚方法
n 步骤:
u 将父类的方法标记为虚方法,使用关键字 virtual,这个函数可以被子类重新写一个遍
n 2)、抽象类
u 当父类中的方法不知道如何去实现的时候,可以考虑将父类写成抽象类,将方法写成抽象方法。
l 序列化 & 反序列化
n 序列化:就是将对象转换为二进制
n 反序列化:就是将二进制转换为对象
n 作用:传输数据。
n 序列化:
n 1)、将这个类标记为可以被序列化的。
l 接口
n 访问修饰符 interface I..able
n {
n 成员;
n }
l sealed密封类不能够被其他类继承,但是可以继承于其他类。
Winform
1、winform应用程序是一种智能客户端技术,我们可以使用winform应用程序
帮助我们获得信息或者传输信息等。
2、属性
Name:在后台要获得前台的控件对象,需要使用Name属性。
visible:指示一个控件是否可见。
Enabled:指示一个控件是否可用。
3、事件:发生一件事情。
注册事件:双击控件注册的都是控件默认被选中的那个事件。
触发事件:
4、
在Main函数当中创建的窗体对象,我们称之为这个窗体应用程序的主窗体。
也就意味着,当你将主窗体关闭后,整个应用程序都关闭了。
5、TextBox控件
WordWrap:指示文本框是否换行。
PasswordChar:让文本框显示一个单一的字符
ScollBars:是否显示滚动条
事件:TextChanged 当文本框中的内容发生改变的时候触发这个事件。
6、跑马灯练习
abcde
bcdea
string str="abcde";
str=str.Substring(1)+str.Substring(0,1);
cdeab
deabc
eabcd
abcde
7、Timer
在指定的时间间隔内做一件指定的事情。
8、简单记事儿本应用程序
1)、在程序加载的时候,取消文本框的自动换行,以及让两个按钮和文本框隐藏
2)、点击登陆,判断是否登陆成功
3)、自动换行功能
4)、保存文本到一个指定目录下。
9、单选和多选
checked:指示这个控件是否处于选中状态。
默认情况下,在一个窗体中,所有的单选按钮只允许选中一个,可以使用groupbox进行分组。
10、MDI窗体的设计
1、首先确定一个父窗体。将IsMdiContainer设置为true。
2、创建子窗体,并且设置他们的父窗体。
1、Directory 操作文件夹
CreateDirectory 创建文件夹
Delete 删除文件夹
Move 剪切文件夹
Exist 判断是否存在
GetFiles 获得指定的目录下所有文件的全路径
GetDirectory 获得指定目录下所有文件夹的全路径
2、WebBrowser浏览器控件
3、ComboBox下拉框控件
DropDownStyle:控制下拉框的外观样式
名字:cbo+....
案例:日期选择器
4、点击更换图片
在程序加载的时候,将指定图片文件夹中所有的图片文件名读取到ListBox中
5、石头剪刀布
石头 1 剪刀 2 布 3
玩家赢了: 1 2=-1 2 3=-1 3 1=2
平手: 相减 =0
另外一种情况:电脑赢了
6、对话框
7、进程
我们可以把计算机中每一个运行的应用程序都当做是一个进程。
而一个进程又是由多个线程组成的。
8、单线程给我们带来的问题
9、在.Net下,是不允许跨线程的访问。
HTML & CSS
1、HTML
超文本标记语言
在HTML当中存在着大量的标签,我们用HTML提供的标签,将要显示在网页中的内容包含起来。
就构成了我们的网页。
CSS:控制网页内容显示的效果。
HTML+CSS=静态网页。
JS+Jquery
2、开始动手写HTML页面
1)、首先在桌面上随便的建一个文件。
2)、将创建的文件的名称改为.htm /.html
3)、开始写基本的框架标签
3、HTML中的标签
p标签:段落标签
 :空格
h#:标题标签
<!--要注释的内容-->:注释符
<img/>:图片标签,用来显示图片。
src:表示要显示的图片的路径
heigth:图片的高度 px
width:图片宽度 px
alt:当图片由于某些原因显示失败的时候所显示的文本
title:当光标移动到图片上的时候显示的文本
<hr/>:分割线
<font></font>:字体标签 size =1 ~7 7最大 color:颜色 face:字体系列
a标签:超链接 href表示要连接到的地址 target:打开新网页的方式 _blank表示打开一个新网页进行跳转。
_self表示在当前页面进行跳转。
实现页面内部的跳转
实现页面间的跳转
发送邮件
4、Div+Span
能够熟练掌握css+div布局
1、注释符
单行注释 // 注释单行代码
多行注释 /*要注释内容*/
文档注释 /// 注释类和方法
HTML <!--要注释的内容-->
CSS /*要注释的内容*/
2、命名规范
Camel骆驼命名规范:要求首单词的首字母小写,其余单词首字母大写,变量、字段
int age string name char gender string highSchool
int _chinese
.NET 基础 一步步 一幕幕 [.NET基础知识点]的更多相关文章
- .NET 基础 一步步 一幕幕[XML基础操作]
XML可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言. 什么是XML,学他有什么用? 优点:容易读懂,格式标准任何语言都内置了XML分析引擎,不用单独进行文件分 ...
- .NET 基础一步步一幕幕[面向对象前言]
面向对象前言 2017年的第一篇博文,好久不写博文了,赶紧补上,感觉在以前的<.NET 基础一步步一幕幕>系列博客中,简短的小知识点已经介绍的差不多的(PS:如果还有别的基础知识点我没有介 ...
- .NET 基础 一步步 一幕幕 [前言]
.NET 基础 一步步 一幕幕 [前言部分] 本人小白一枚,虽然说从去年就开通博客了,到现在也没有写多少东东,虽然工作了,也没有更好得总结.故此重新祭出博客园法宝,修炼技术,争取早日走上大神之位. 故 ...
- .NET 基础 一步步 一幕幕[面向对象之对象和类]
对象和类 本篇正式进入面向对象的知识点简述: 何为对象,佛曰:一花一世界,一木一浮生,一草一天堂,一叶一如来,一砂一极乐,一方一净土,一笑一尘缘,一念一清静.可见"万物皆对象". ...
- .NET 基础 一步步 一幕幕 [.NET 简介]
.NET 简介 .NET是 Microsoft XML Web services 平台.是微软用来实现XML,Web Services,SOA(面向服务的体系结构service-oriented ar ...
- .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]
方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...
- .NET基础 一步步 一幕幕[循环、逻辑语句块]
循环.逻辑语句块 好久不写博客了,断更了好几天了,从上周五到今天,从北京到上海,跨越了1213.0公里,从一个熟悉的城市到陌生的城市,还好本人适应力比较好,还有感谢小伙伴的接风咯,一切都不是事,好 ...
- .NET 基础 一步步 一幕幕[面向对象之构造函数、析构函数]
构造函数.析构函数 构造函数: 语法: //无参的构造函数 [访问修饰符] 函数名() :函数名必须与类名相同. //有参的构造函数 [访问修饰符] 函数名(参数列表):函数名必须与类名相同. 作用: ...
- .NET 基础一步步一幕幕[out、ref、params]
out.ref.params out: 如果你在一个方法中,返回多个相同类型的值的时候,可以考虑返回一个数组. 但是,如果返回多个不同类型的值的时候,返回数组就不行了,那么这个时候, 我们可以考虑使用 ...
随机推荐
- 挂断电话demo
<!-- 结束通话和打电话的权限 --> <uses-permission android:name="android.permission.CALL_PHONE" ...
- MongoDB 倾向于将数据都放在一个 Collection 下吗?
不是这样的. Collection 的单个 doc 有大小上限,现在是 16MB,这就使得你不可能把所有东西都揉到一个 collection 里.而且如果 collection 结构过于复杂,既会影响 ...
- CORS 理解(不要那么多术语)
摘要 谈到跨域,不论前端还是后端,多少有点谈虎色变,面试中也常会问到这些问题,浏览器和服务器端到底怎么做才能跨域,他们都做了什么? 同源 vs 跨域 同源,字面意义是相同的源头,即同一个web服务器( ...
- "makefile:5: *** missing separator. Stop."【转】
本文转载自:http://blog.csdn.net/fireroll/article/details/8607903 写makefile时出现这个错误提示 是表示makefile中的命令前没有使用T ...
- 关于Spring Security的笔记
1.web.xml配置文件 加载Spring Security,将DelegatingFilterProxy配置在DispatcherServlet之前. <filter> <fil ...
- hdu-5768 Lucky7(容斥定理+中国剩余定理)
题目链接: Lucky7 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Pr ...
- C语言system()函数:执行shell命令
头文件:#include <stdlib.h> 定义函数:int system(const char * string); 函数说明:system()会调用fork()产生子进程, 由子进 ...
- Kvm学习文档记录
一.实验环境: 在vmware上打开vt支持选项: 操作系统信息: [root@node2 ~]# cat /etc/issue CentOS release 6.6 (Final) Kernel \ ...
- 激活层和pooling的作用
激活层: 激活函数其中一个重要的作用是加入非线性因素的,将特征映射到高维的非线性区间进行解释,解决线性模型所不能解决的问题 pooling层: 1. invariance(不变性),这种不变性包括tr ...
- SNMP:简单网络管理协议
基于 TCP/IP 的网络管理包括两部分:网络管理站 (manager) 和被管理的网络单元(被管设备).这些被管设备的共同点就是都运行 TCP/IP 协议.管理进程和代理进程之间的通信有两种方式,一 ...