.NET 基础 一步步 一幕幕 [.NET基础知识点]

2018-06-22 04:37:05来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

.NET基础知识点

 

.Net平台  .Net FrameWork框架

 

.Net FrameWork框架提供了一个稳定的运行环境,;来保障我们.Net平台正常的运转

 

两种交互模式

  • C/S:要求客户的电脑上必须要安装一个客户端:qq360、快播等.....
  • B/S:要求客户的电脑上只需要安装一个浏览器

 

书写代码需要注意的地方:

代码中出现的所有标点都是英文半角 shift键快速切换中文半角和英文半角

shift+空格切换全角/半角

c#代码中,每行代码的结束,我们都以分号结束,注意:这个分号也是英文半角的分号。

Console.WriteLine("要打印的内容");

Console.ReadKey(); 暂停当前程序,等待用户按下任意键继续,按下的任意键将显示在我们的控制台当中

 

注释符:

1)、注销

2)、解释

C#3种注释符:

1)、单行注释 //

2)、多行注释 /*要注释的内容*/

3)、文档注释 /// 多用来解释类或者方法

 

常量

声明的常量的语法:

const 变量类型变量名=;

 

变量:用来在计算机当中存储数据:

变量类型int double string char bool decimal

声明并且给变量赋值的简写形式:

u 变量类型变量名=;

变量的使用规则:

u 如果你要是用变量的话,应该要先声明再赋值再使用。

给变量起名字的时候要满足两个命名规范:

u 1Camel 骆驼命名规范。要求变量名首单词的首字母要小写,其余每个单词的首字母要大写。

u 多用于给变量命名。

u 2Pascal 命名规范:要求每个单词的首字母都要大写,其余字母小写。多用于给类或者方法命名。

u HighSchoolStudent

u highSchoolStudent

变量的作用域:      

u 变量的作用域就是你能够使用到这个变量的范围。

u 变量的作用域一般从声明它的那个括号开始到那个括号所对应的结束的括号结束。

u 在这个范围内,我们可以访问并使用变量。超出这个范围就访问不到了

 

数据类型:

1)、整数类型:int  只能存储整数,不能存储小数。

2)、小数类型:double 既能存储整数,也能存储小数,小数点后面的位数 15~16位。

3)、金钱类型:decimal:用来村粗金钱,值后面需要加上一个m.

4)、字符串类型:string,用来存储多个文本,也可以存储空,字符串类型的值需要被双引号引来,

这个双引号必须是英文半角状态下的双引号

5)、字符类型:char,用来存储单个字符,最多、最少只能有一个字符,不能存储空。

字符类型的值需要用单引号因起来。英文半角状态下的单引号。

 

波浪线

1)、如果你的代码中出现了红色的波浪线,意味着你的代码中出现了语法错误。

2)、如果你的代码中出现了绿色的波浪线,说明你的代码语法并没有错误,

只不过提示你有可能会出现错误,但是不一定会出现错误。警告

 

命名规则:

****首先要保证的就是这个变量的名字要有意义。

1 现阶段给变量起名字的时候都以字母开头

2 后面可以跟任意“字母”、数字、下划线.

注意:

u 1)你起的变量名不要与c#系统中的关键字重复.

u 2)在c#,大小写是敏感的.  HTML

u 3)同一个变量名不允许重复定义(先这么认为,不严谨)

 

赋值运算符

=:表示赋值的意思,表示把等号右边的值,赋值给等号左边的变量。

由等号连接的表达式称之为赋值表达式。

注意:每个表达式我们都可以求解除一个定值,对于赋值表达式而言,等号左边的变量的值,

就是整个赋值表达式的值。

int number=10;

 

+号的作用

1)、连接:当+号两边有一边是字符串的时候,+号就起到连接的作用。

2)、相加:两边是数字的时候

 

占位符

使用方法:先挖个坑,再填个坑。

使用占位符需要注意的地方:

1、你挖了几个坑,就应该填几个坑,如果你多填了,没效果。

                                 如果你少填了,抛异常。

2、输出顺序:按照挖坑的顺序输出。

 

异常

异常是指:语法上并没有任何错误,只不过在程序运行的期间,由于某些原因出现了问题,

使程序不能再正常的运行。  

 

转义符

转义符指的就是一个'\'+一个特殊的字符,组成了一个具有特殊意义的字符。

\n:表示换行

\":表示一个英文半角的双引号

\t:表示一个tab键的空格

\b:表示一个退格键,放到字符串的两边没有效果。

\r\n:windows操作系统不认识\n,只认识\r\n

\\:表示一个\

 

@符号

1、取消\在字符串中的转义作用,使其单纯的表示为一个'\'

2、将字符串按照编辑的原格式输出

 

算数运算符

+

-

*

/

%

 

类型转换

隐式类型转换:

我们要求等号两遍参与运算的操作数的类型必须一致,如果不一致,满足下列条件会发生

u 自动类型转换,或者称之为隐式类型转换。

u 两种类型兼容

u 例如:int double 兼容(都是数字类型)

u 目标类型大于源类型

u 例如:double > int   小的转大的

显示类型转换:

u 1、两种类型相兼容  int--double

u 2、大的转成小的  double----int

语法:

u (待转换的类型)要转换的值;

 

总结:

u 自动类型转换:int---->doublec   小的转大的

u 显示类型转换:double--->int     大的转小的

 

Convert进行类型转换:

类型如果相兼容的两个变量,可以使用自动类型转换或者强制类型转换,但是,如果两个类型的变量不兼容,比如 stringint或者string double,这个时候我们可以使用一个叫做Convert的转换工厂进行转换。

注意:使用Convert进行类型转换,也需要满足一个条件:

u 面儿上必须要过的去。

 

算数运算符

++:分为前++和后++,不管是前++还是后++,最终的结果都是给这个变量加一。

区别表现表达式当中,如果是前++,则先给这个变量自身加一,然后带着这个加一后的值去参与运算。

如果是后++,则先拿原值参与运算,运算完成后,再讲这个变量自身加一。

--:同上。

 

对于向加加或者减减这样只需要一个操作数就能完成的运算,我们称之为一元运算符。

+ - * / % 对于这些需要两个或以上才能完成运算的操作符,我们称之为二元运算符。

一元运算符的优先级要高于而元运算符。

如果在一个表达式当中,既有一元运算符,又有二元运算符,我们首先计算一元运算符。

 

int number=10;

int result=10 + ++number;

 

 

关系运算符

>=

<=

==

!=

关系运算符是用来描述两个事物之间的关系

由关系运算符连接的表达式称之为关系表达式。

 

bool类型

c#中我们用bool类型来描述对或者错。

bool类型的值只有两个一个true  一个false

 

逻辑运算符

&& 逻辑与

||逻辑或

!逻辑非

又逻辑运算符连接的表达式叫做逻辑表达式

逻辑运算符两边放的一般都是关系表达式或者bool类型的值。

 5>3 &&true

 3>5||false

 !表达式

 逻辑表达式的结果同样也是bool类型

 

复合赋值运算符

int number=10;

+= :

number+=20;

number=number+20;

-=

number-=5;

number=number-5;

*=

number*=5;

number=number*5;

/=

%=

 

三元表达式

语法:

u 表达式1?表达式2:表达式3;

表达式1一般为一个关系表达式。

如果表达式1的值为true,那么表达式2的值就是整个三元表达式的值。

如果表达式1的值为false,那么表达式3的值就是整个三元表达式的值。

注意:表达式2的结果类型必须跟表达式3的结果类型一致,并且也要跟整个三元表达式的结果类型一致。

 

 

if语句:

语法:

u if(判断条件)

u {

u        要执行的代码;

u }

判断条件:一般为关系表达式或者bool类型的值。

执行过程:

u 程序运行到if处,首先判断if所带的小括号中的判断条件,

u 如果条件成立,也就是返回true,则执行if所带的大括号中的代码,

u 如果判断条件不成立,也就是返回一个false。则跳过if结构,继续向下执行。

 

if结构的特点:先判断,再执行,有可能一行代码都不执行

用于一种情况的判断。

 

if-else

语法:

u if(判断条件)

u {

u        执行的代码;

u }

u else

u {

u        执行的代码

u }

执行过程:

u 程序执行到if处,首先判断if所带的小括号中的判断条件是否成立,

u 如果成立,也就是返回一个true,则执行if所带的大括号中的代码,

u 执行完成后,跳出if-else结构。

u 如果if所带的小括号中的判断条件不成立,也就是返回一个false

u 则跳过if语句,执行else所带的大括号中的语句,执行完成后,跳出if-else结构。

 

if-else特点:先判断,再执行,最少都要执行一条代码。

用于两种情况的判断

注意:else永远跟离它最近的那个if配对

 

if else-if

作用:用来处理多条件的区间性的判断。

语法:

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 }

执行过程;

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可以省略。

 

异常捕获

我们在程序中经常会出现各种各样的异常,你如果想要你的程序变得坚强一些。

在你的代码中应该经常性的使用try-catch来进行异常捕获。

 

哪行代码有可能出现异常,你就踹它一脚。

语法:

u try

u {

u        可能会出现异常的代码;

u        ....

u        ...

u        ...

u }

u //trycatch之间不能有其他的代码

u catch

u {

u        出现异常后要执行的代码;

u }

 

执行过程:如果try中的代码没有出现异常,那么catch中的代码不会执行。

如果try中的代码出现了异常,那怕这行出现异常的代码后面还有一百行都不会执行了,

而是直接跳到catch中执行代码

 

switch-case

用来处理多条件的定值的判断。

语法:

u switch(变量或者表达式的值)

u {

u        case 1:要执行的代码;

u        break;

u        case 2:要执行的代码;

u        break;

u        case 3:要执行的代码;

u        break;

u        ..........

u        default:要执行的代码;

u        break;

u }

执行过程:

u 程序执行到switch处,首先将括号中变量或者表达式的值计算出来,

u 然后拿着这个值依次跟每个case后面所带的值进行匹配,一旦匹配成功,则执行

u case所带的代码,执行完成后,遇到break。跳出switch-case结构。

u 如果,跟每个case所带的值都不匹配。就看当前这个switch-case结构中是否存在

u default,如果有default,则执行default中的语句,如果没有default,则该switch-case结构什么都不做。

 

循环结构

while循环:

u while(循环条件)

u {

u        循环体;

u }

执行过程:

u 程序运行到while处,首先判断while所带的小括号内的循环条件是否成立,

u 如果成立的话,也就是返回一个true,则执行循环体,执行完一遍循环体后,再次回到

u 循环条件进行判断,如果依然成立,则继续执行循环体,如果不成立,则跳出while循环。

u while循环当中,一般总会有那么一行代码,能够改变循环条件,使之终有一天不再成立,

u 如果没有那么一行代码能够改变循环条件,也就是循环条件永远都成立,我们称之这种循环叫做死循环。

u 最简单的最常用的死循环:

while(true)

{

 

}

 

特点:先判断,再执行,有可能一遍循环都不执行。

 

do-while循环。

语法:

u do

u {

u        循环体;

u }while(循环条件);

执行过程:程序首先会执行do中的循环体,执行完成后,去判断do-while循环的循环条件,

如果成立,则继续执行do中的循环体,如果不成立,则跳出do-while循环。

特点:先循环,再判断,最少执行一遍循环体。

 

for循环

语法:

u for(表达式1;表达式2;表达式3)

u {

u        循环体;

u }

表达式1一般为声明循环变量,记录循环的次数(int i=0;)

表达式2一般为循环条件(i<10)

表达式3一般为改变循环条件的代码,使循环条件终有一天不再成立(i++)

执行过程:

u 程序首先执行表达式1,声明了一个循环变量用来记录循环的次数,

u 然后执行表达式2,判断循环条件是否成立,如果表达式2返回的结果为true

u 则执行循环体。当执行完循环体后,执行表达式3,然后执行表达式2继续判断循环条件是否成立,

u 如果成立则继续执行循环体,如果不成立,则跳出for循环。

 

break

1)、可以跳出switch-case结构。

2)、可以跳出当前循环。

break一般不单独的使用,而是跟着if判断一起使用,表示,当满足某些条件的时候,就不再循环了。

 

程序调试

1)、写完一段程序后,想看一下这段程序的执行过程。

2)、当你写完这段程序后,发现,程序并没有按照你想象的样子去执行。

 

调试方法:

u 1)F11逐语句调试(单步调试)

u 2)F10逐过程调试

u 3)、断点调试

 

int.TryParse int.parse 尝试着将一个字符串转换成int类型。

 

枚举

语法:

u 访问修饰符enum 枚举名

u {

u        1,

u        2,

u        3,

u        ........

u }

enum:关键字,声明枚举的关键字

枚举名:要符合Pascal命名规范

 

将枚举声明到命名空间的下面,类的外面,表示这个命名空间下,所有的类都可以使用这个枚举。

 

枚举就是一个变量类型int--double  string  decimal.

只是枚举声明、赋值、使用的方式跟那些普通的变量类型不一样。

我们可以将一个枚举类型的变量跟int类型和string类型互相转换。

枚举类型默认是跟int类型相互兼容的,所以可以通过强制类型转换的语法互相转换。

当转换一个枚举中没有的值的时候,不会抛异常,而是直接将数字显示出来。

枚举同样也可以跟string类型互相转换,如果将枚举类型转换成string类型,则直接调用ToString().

如果将字符串转换成枚举类型则需要下面这样一行代码:

       (要转换的枚举类型)Enum.Parse(typeof(要转换的枚举类型),"要转换的字符串");

如果转换的字符串是数字,则就算枚举中没有,也会不会抛异常。

如果转换的字符串是文本,如果枚举中没有,则会抛出异常。

 

结构

可以帮助我们一次性声明多个不同类型的变量。

语法:

u [public] struct 结构名

u {

u        成员;//字段

u }

变量在程序运行期间只能存储一个值,而字段可以存储多个值。

 

数组

一次性存储多个相同类型的变量。

语法:

数组类型[] 数组名=new 数组类型[数组长度];

 

***数组的长度一旦固定了,就不能再被改变了

 

 

冒泡排序:就是将一个数组中的元素按照从大到小或者从小到大的顺序进行排列。

int[] nums={9,8,7,6,5,4,3,2,1,0}; 0 1 2 3 4 5 6 7 8 9

第一趟比较:8 7 6 5 4 3 2 1 0 9 交换了9     i=0j=nums.Length-1-i

第二趟比较:7 6 5 4 3 2 1 0 8 9 交换了8     i=1j=nums.Length-1-i

第三趟比较:6 5 4 3 2 1 0 7 8 9 交换了7     i=2j=nums.Length-1-i

第四趟比较:5 4 3 2 1 0 6 7 8 9 交换了6     i=3j=nums.Length-1-i

第五趟比较:4 3 2 1 0 5 6 7 8 9 交换了5

第六趟比较:3 2 1 0 4 5 6 7 8 9 交换了4

第七趟比较:2 1 0 3 4 5 6 7 8 9 交换了3

第八趟比较:1 0 2 3 4 5 6 7 8 9 交换了2

第九趟比较:0 1 2 3 4 5 6 7 8 9 交换了1

for(int i=0;i<number.Length-1;i++)

{

       for(int j=0;j<nums.Length-1-i;j++)

       {

              if(nums[j]>nums[j+1])

              {

                     int temp=nums[j];

                     nums[j]=nums[j+1];

                     nums[j+1]=temp;

              }

       }

}

 

方法

函数就是将一堆代码进行重用的一种机制。

函数的语法:

u [public] static 返回值类型方法名([参数列表])

u {

u        方法体;

u }

u public:访问修饰符,公开的,公共的,哪都可以访问。

u static:静态的

u 返回值类型:如果不需要写返回值,写void

u 方法名:Pascal 每个单词的首字母都大些。其余字母小写

u 参数列表:完成这个方法所必须要提供给这个方法的条件。如果没有参数,小括号也不能省略。

u  

u 方法写好后,如果想要被执行,必须要在Main()函数中调用。

u 方法的调用语法:

u 类名.方法名([参数]);

u ***在某些情况下,类名是可以省略的,如果你写的方法跟Main()函数同在一个类中,这个时候,

u 类名可以省略。

方法的功能一定要单一。

u GetMax(int n1,int n2)

u 方法中最忌讳的就是出现提示用户输入的字眼。

 

return

1、在方法中返回要返回的值。

2、立即结束本次方法。

 

我们在Main()函数中,调用Test()函数,

我们管Main()函数称之为调用者,

Test()函数称之为被调用者。

如果被调用者想要得到调用者的值:

u 1)、传递参数。

u 2)、使用静态字段来模拟全局变量。

如果调用者想要得到被调用者的值:

u 1)、返回值

 

不管是实参还是形参,都是在内存中开辟了空间的。

 

outrefparams

1)out参数。

u 如果你在一个方法中,返回多个相同类型的值的时候,可以考虑返回一个数组。

u 但是,如果返回多个不同类型的值的时候,返回数组就不行了,那么这个时候,

u 我们可以考虑使用out参数。

u out参数就侧重于在一个方法中可以返回多个不同类型的值。

 

2)ref参数

u 能够将一个变量带入一个方法中进行改变,改变完成后,再讲改变后的值带出方法。

u ref参数要求在方法外必须为其赋值,而方法内可以不赋值。

 

3)params可变参数

u 将实参列表中跟可变参数数组类型一致的元素都当做数组的元素去处理。

u params可变参数必须是形参列表中的最后一个元素。

 

方法的重载

概念:方法的重载指的就是方法的名称相同给,但是参数不同。

参数不同,分为两种情况

u 1)、如果参数的个数相同,那么参数的类型就不能相同。

u 2)、如果参数的类型相同,那么参数的个数就不能相同。

u ***方法的重载跟返回值没有关系。

 

方法的递归

方法自己调用自己。

找出一个文件夹中所有的文件。

 

 

面向过程-----> 面向对象

 

面向过程:面向的是完成这件事儿的过程,强调的是完成这件事儿的动作。

 

语法:

u [public] class 类名

u {

u        字段;

u        属性;

u        方法;

u }

写好了一个类之后,我们需要创建这个类的对象,

那么,我们管创建这个类的对象过程称之为类的实例化。

使用关键字 new.

 

this:表示当前这个类的对象。

类是不占内存的,而对象是占内存的。

 

属性

属性的作用就是保护字段、对字段的赋值和取值进行限定。

属性的本质就是两个方法,一个叫get()一个叫set()

既有get()也有set()我们诚之为可读可写属性。

只有get()没有set()我们称之为只读属性

没有get()只有set()我们称之为只写属性

 

Field字段

Method方法

Property属性

 

****字段就是女人  属性才是男人。

 

访问修饰符:

访问修饰符

说明

public

公有访问。不受任何限制。

private

私有访问。只限于本类成员访问,子类,实例都不能访问。

protected

保护访问。只限于本类和子类访问,实例不能访问。

internal

内部访问。只限于本项目内访问,其他不能访问。

protected internal

内部保护访问。只限于本项目或是子类访问,其他不能访问

 

当我们创建好一个类的对象后,需要给这个对象的每个属性去赋值。我们管这个过程称之为对象的初始化。

 

静态和非静态的区别

1)、在非静态类中,既可以有实例成员,也可以有静态成员。

2)、在调用实例成员的时候,需要使用对象名.实例成员;

    在调用静态成员的时候,需要使用类名.静态成员名;

总结:静态成员必须使用类名去调用,而实例成员使用对象名调用。

静态函数中,只能访问静态成员,不允许访问实例成员。

实例函数中,既可以使用静态成员,也可以使用实例成员。

静态类中只允许有静态成员,不允许出现实例成员。

 

使用:

1)、如果你想要你的类当做一个"工具类"去使用,这个时候可以考虑将类写成静态的。

2)、静态类在整个项目中资源共享。

只有在程序全部结束之后,静态类才会释放资源。

 

 

    静态存储区域

 

释放资源。GC Garbage Collection垃圾回收器

 

 

构造函数

作用:帮助我们初始化对象(给对象的每个属性依次的赋值)

构造函数是一个特殊的方法:

u 1)、构造函数没有返回值,连void也不能写。

u 2)、构造函数的名称必须跟类名一样。

 

创建对象的时候会执行构造函数

构造函数是可以有重载的。

***

类当中会有一个默认的无参数的构造函数,当你写一个新的构造函数之后,不管是有参数的还是

无参数的,那个默认的无参数的构造函数都被干掉了。

 

new关键字

Person zsPerson=new Person();

new帮助我们做了3件事儿:

u 1)、在内存中开辟一块空间

u 2)、在开辟的空间中创建对象

u 3)、调用对象的构造函数进行初始化对象

1)、创建对象

2)、隐藏从父类那里继承过来的同名成员。

隐藏的后果就是子类调用不到父类的成员。

 

this关键字

1)、代表当前类的对象

2)、在类当中显示的调用本类的构造函数  :this

 

命名空间

可以认为类是属于命名空间的。

如果在当前项目中没有这个类的命名空间,需要我们手动的导入这个类所在的

命名空间。

u 1)、用鼠标去点

u 2)alt+shift+F10

u 3)、记住命名空间,手动的去引用

 

值类型和引用类型

区别:

u 1、值类型和引用类型在内存上存储的地方不一样。

u 2、在传递值类型和传递引用类型的时候,传递的方式不一样。

u 值类型我们称之为值传递,引用类型我们称之为引用传递。

我们学的值类型和引用类型:

u 值类型:intdoubleboolchardecimalstructenum

u 引用类型:string、自定义类、数组

存储:

u 值类型的值是存储在内存的栈当中。

u 引用类型的值是存储在内存的堆中。

值类型在复制的时候,传递的是这个值得本身。

引用类型在复制的时候,传递的是对这个对象的引用。

 

字符串

1)、字符串的不可变性

当你给一个字符串重新赋值之后,老值并没有销毁,而是重新开辟一块空间存储新值。

当程序结束后,GC扫描整个内存,如果发现有的空间没有被指向,则立即把它销毁。

2)、我们可以讲字符串看做是char类型的一个只读数组。

ToCharArray();将字符串转换为char数组

new string(char[] chs):能够将char数组转换为字符串

 

字符串提供的各种方法

1)Length:获得当前字符串中字符的个数

2)ToUpper():将字符转换成大写形式

3)ToLower():将字符串转换成小写形式

4)Equals(lessonTwo,StringComparison.OrdinalIgnoreCase):比较两个字符串,可以忽略大小写

5)Split():分割字符串,返回字符串类型的数组。

6)Substring():解决字符串。在截取的时候包含要截取的那个位置。

7)IndexOf():判断某个字符串在字符串中第一次出现的位置,如果没有返回-1、值类型和引用类型在内存上存储的地方不一样。

8)LastIndexOf():判断某个字符串在字符串中最后一次出现的位置,如果没有同样返回-1

9)StartsWith():判断以....开始

10)EndsWith():判断以...结束

11)Replace():将字符串中某个字符串替换成一个新的字符串

12)Contains():判断某个字符串是否包含指定的字符串

13)Trim():去掉字符串中前后的空格

14)TrimEnd():去掉字符串中结尾的空格

15)TrimStart():去掉字符串中前面的空格

16)string.IsNullOrEmpty():判断一个字符串是否为空或者为null

17)string.Join():将数组按照指定的字符串连接,返回一个字符串。

 

继承

我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员,

单独的封装到一个类中,作为这些类的父类。

StudentTeacherDriver  子类  派生类

Person                                 父类  基类

子类继承了父类,那么子类从父类那里继承过来了什么?

首先,子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。

问题:子类有没有继承父类的构造函数?

u 答:子类并没有继承父类的构造函数,但是。子类会默认的调用父类无参数的构造函数,

创建父类对象,让子类可以使用父类中的成员。

所以,如果在父类中重新写了一个有参数的构造函数之后,那个无参数的就被干掉了,

子类就调用不到了,所以子类会报错。

解决办法:

u 1)、在父类中重新写一个无参数的构造函数。

u 2)、在子类中显示的调用父类的构造函数,使用关键字:base()

继承的特性

u 1、继承的单根性:一个子类只能有一个父类。

u 2、继承的传递性

 

里氏转换

1)、子类可以赋值给父类

2)、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象。

 

子类对象可以调用父类中的成员,但是父类对象永远都只能调用自己的成员。

 

IS & AS

is:表示类型转换,如果能够转换成功,则返回一个true,否则返回一个false

as:表示类型转换,如果能够转换则返回对应的对象,否则返回一个null

 

ArrayList集合的长度问题

每次集合中实际包含的元素个数(count)超过了可以包含的元素的个数(capcity)的时候,

集合就会向内存中申请多开辟一倍的空间,来保证集合的长度一直够用。

 

Hastable 键值对集合  字典      sun--- 

在键值对集合当中,我们是根据键去找值的。

键值对对象[]=;

*****:键值对集合当中,键必须是唯一的,而值是可以重复的

 

编码格式

产生乱码的原因就是因为你保存这个文件的编码格式跟你打开这个文件的编码格式不一样

 

绝对路径和相对路径

绝对路径:通过给定的这个路径直接能在我的电脑中找到这个文件。

相对路径:文件相对于应用程序的路径。

结论:

我们在开发中应该去尽量的使用相对路径。

 

装箱、拆箱

装箱:就是将值类型转换为引用类型。

拆箱:将引用类型转换为值类型。

看两种类型是否发生了装箱或者拆箱,要看,这两种类型是否存在继承关系。

 

将创建文件流对象的过程写在using当中,会自动的帮助我们释放流所占用的资源。

 

实现多态的手段

1)、虚方法

步骤:

u 将父类的方法标记为虚方法,使用关键字 virtual,这个函数可以被子类重新写一个遍

2)、抽象类

u 当父类中的方法不知道如何去实现的时候,可以考虑将父类写成抽象类,将方法写成抽象方法。

 

序列化 & 反序列化

序列化:就是将对象转换为二进制

反序列化:就是将二进制转换为对象

 作用:传输数据。

  序列化:

       1)、将这个类标记为可以被序列化的。

 

接口

访问修饰符 interface I..able

{

       成员;

}

 

sealed密封类不能够被其他类继承,但是可以继承于其他类。

 

 

 

 

Winform

 

1winform应用程序是一种智能客户端技术,我们可以使用winform应用程序

帮助我们获得信息或者传输信息等。

 

2、属性

Name:在后台要获得前台的控件对象,需要使用Name属性。

visible:指示一个控件是否可见。

Enabled:指示一个控件是否可用。

 

3、事件:发生一件事情。

注册事件:双击控件注册的都是控件默认被选中的那个事件。

触发事件:

 

4

Main函数当中创建的窗体对象,我们称之为这个窗体应用程序的主窗体。

也就意味着,当你将主窗体关闭后,整个应用程序都关闭了。

 

5TextBox控件

WordWrap:指示文本框是否换行。

PasswordChar:让文本框显示一个单一的字符

ScollBars:是否显示滚动条

事件:TextChanged 当文本框中的内容发生改变的时候触发这个事件。

 

6、跑马灯练习

abcde

bcdea

string str="abcde";

            str=str.Substring(1)+str.Substring(0,1);

 

 

cdeab

deabc

eabcd

abcde

 

 

7Timer

在指定的时间间隔内做一件指定的事情。

 

 

8、简单记事儿本应用程序

1)、在程序加载的时候,取消文本框的自动换行,以及让两个按钮和文本框隐藏

2)、点击登陆,判断是否登陆成功

3)、自动换行功能

4)、保存文本到一个指定目录下。

 

 

9、单选和多选

checked:指示这个控件是否处于选中状态。

 

默认情况下,在一个窗体中,所有的单选按钮只允许选中一个,可以使用groupbox进行分组。

 

10MDI窗体的设计

1、首先确定一个父窗体。IsMdiContainer设置为true

2、创建子窗体,并且设置他们的父窗体。

 

   1Directory 操作文件夹

CreateDirectory 创建文件夹

Delete  删除文件夹

Move  剪切文件夹

Exist  判断是否存在

GetFiles 获得指定的目录下所有文件的全路径

GetDirectory 获得指定目录下所有文件夹的全路径

 

2WebBrowser浏览器控件

 

3ComboBox下拉框控件

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

 

1HTML

超文本标记语言

HTML当中存在着大量的标签,我们用HTML提供的标签,将要显示在网页中的内容包含起来。

就构成了我们的网页。

 

CSS:控制网页内容显示的效果。

 

HTML+CSS=静态网页。

JS+Jquery

 

2、开始动手写HTML页面

1)、首先在桌面上随便的建一个文件。

2)、将创建的文件的名称改为.htm /.html

3)、开始写基本的框架标签

 

 

3HTML中的标签

p标签:段落标签

&nbsp:空格

h#:标题标签

<!--要注释的内容-->:注释符

<img/>:图片标签,用来显示图片。

src:表示要显示的图片的路径

heigth:图片的高度 px

width:图片宽度  px

alt:当图片由于某些原因显示失败的时候所显示的文本

title:当光标移动到图片上的时候显示的文本

<hr/>:分割线

<font></font>:字体标签  size =1 ~7 7最大  color:颜色 face:字体系列

a标签:超链接  href表示要连接到的地址  target:打开新网页的方式 _blank表示打开一个新网页进行跳转。

_self表示在当前页面进行跳转。

 

实现页面内部的跳转

实现页面间的跳转

发送邮件

 

4Div+Span

能够熟练掌握css+div布局

 

 

1、注释符

单行注释 // 注释单行代码

多行注释  /*要注释内容*/

文档注释  /// 注释类和方法

HTML <!--要注释的内容-->

CSS /*要注释的内容*/

 

2、命名规范

Camel骆驼命名规范:要求首单词的首字母小写,其余单词首字母大写,变量、字段

int age  string name  char gender  string highSchool

int _chinese

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:[C#] 简单的 Helper 封装 -- CookieHelper

下一篇:[C#] 简单的 Helper 封装 -- RandomHelper