C#复习1

1.数据类型

double:表示小数类型,既能存储整数也能存储小数
string:能够存储多个文本,可以为空
char:字符类型,能够存储单一的字符,要求 最多最少只能存储1个字符,不能为空
decimal:金钱类型,精度要高于double类型 。

2.占位符

挖个坑,再填个坑。
占位符需要我们注意的地方:
1)、占位符从{0}开始
2)、你挖了几个坑,就填几个坑,如果你多填了,没有效果,但是如果你少填了,程序抛异常
3)、占位符最终按照填坑的顺序输出

3.Convert类型转换
在使用的时候需要注意:
如果要发生类型转换的两个变量的类型不兼容,那么这个时候使用Convert类型转换。
前提:面儿上一定要过的去。
如果转换成功,就成功了,如果失败,则抛异常。


4、一元运算符优先级

在一个表达式当中,如果既有一元运算符也有二元运算符,先算一元运算符。

5、逻辑运算符 

逻辑与的优先级要高于逻辑或,也就是说,在一个逻辑表达式中,如果既有逻辑与运算符,也有逻辑或运算符,

先算逻辑与运算符。

6、break

只能够跳出当前循环,而不能跳出所有循环。

7、continue
在循环中,如果遇到break,则跳出当前循环。
如果遇到continue,则立即停止本次循环,回到循环条件进行判断,如果循环条件成立,则继续执行循环。
如果不成立,则跳出循环。
单独把continue放到循环中没有意义,一般也跟着if语句配合着使用。


8、int.TryParse();
尝试着将一个字符串转换成int类型,如果转换成功的话,返回一个true,并且将转换成功后的值
赋值给一个int类型的参数,如果转换失败的话,返回一个false,并且给这个int类型的参数赋值为0



9、常量
const 常量类型 常量名称=值;

10、枚举

[public] enum 枚举名
{
值1,
值2,
值3,
........
}
枚举名:必须要Pascal命名规范。每个单词的首字母都要大写。
枚举类型和int类型互相兼容,所以两种类型可以通过强制类型转换的语法互相转换
枚举类型的值默认是从0开始的。

不管是将字符串类型的数字转换成枚举类型还是将int类型转换成枚举类型,结果都不会抛异常。
但是,如果要转换的字符串,在枚举中,并没有所对应的值,这个时候会抛异常

 

11、结构:一次性声明多个不同类型的变量
[public] struct 结构名
{
结构成员;
}
字段跟变量有一个本质的区别:字段可以存储多个值,而变量只能存储一个值。

12、数组
数组类型[] 数组名=new 数组类型[数组长度];
注意:数组的长度一旦声明了,就不能再被改变了。

13、冒泡排序
int[] nums={9,8,7,6,5,4,3,2,1,0}; 
for(int i=0;i<nums.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;
}
}
}

14、形参和实参
形参:形式上的参数,也会在内存中开辟空间。
实参:调用函数的时候传入的参数。实实在在存在的参数,都会在内存中开闭空间
问题:形参和实参的名字必须一样么?
不一定

int a=test(b)//实参

public int test(int b)//形参

 

15、在写方法的时候需要注意
1、方法的功能一定要单一。
2、在方法中尽量的避免出现提示用户输入之类的代码。

16、out参数
可以帮助我们在一个方法中返回多个值,不限类型。
使用out参数的时候要求,out参数必须在方法内为其赋值

17、ref参数
ref参数侧重于将一个变量以参数的形式带到一个方法中进行改变,(比较大小)
改变完成后,再讲改变后的值带出来。
在使用ref参数的时候需要注意:ref参数在方法外必须为其赋值。


18、方法的重载
方法的重载指的是方法的名称相同,但是参数不同。
参数不同:
1)、如果参数的个数相同,那么参数的类型就不能相同。
2)、如果参数的类型相同,那么参数的个数就不能相同。

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


19、方法的总结
1、作用:可以让代码重复的使用
2、参数:完成这个方法所必须要的条件
3、返回值:完成方法后,方法返回的结果
4、out参数:可以让方法返回多个值
5、ref参数:侧重于将一个变量带到方法中进行改变,改变完成后,再讲改变后的值带出去。
6、params可变参数:将实参列表中跟可变参数数组类型一样的参数当做是可变参数数组中的元素。
可变参数必须形参列表中的最后一个元素
7、方法的重载:
方法的名称相同,但是参数不同。跟返回值没关系。
参数不同:
1)、如果参数的个数相同,那么参数的类型就不能相同。
2)、如果参数的类型相同,那么参数的个数就不能相同。
8、方法的递归:自己在方法中调用自己。

20、对象
在程序中,我们描述一个对象,描述的是这个对象的属性和方法。

对象是实际存在的,一定是看得见摸得着的。

我们把这些具有相同属性和行为的对象进行进一步的封装,提取出了一个概念"类".

类就是一个模子,确定了对象将会拥有的属性和方法。


21、类
[访问修饰符] class 类名
{
1)类的成员;
//字段、属性、方法
}
访问修饰符:public
类名:Pascal 要求每个单词的首字母都要大写。

2)实例化

我们写好了一个类之后,需要创建这个类对象,我们管创建这个类的对象的过程,称之为类的实例化。
使用关键字 new.


3)类中成员的作用
1)、字段:存储数据

4、类中的成员如果不加访问修饰符,默认是private
private:私有的,只能在类的内部访问,出了这个类之后,就访问不到了。

5)this
this代表当前类的对象


6)类是不占内存的,而对象是占内存的

7)属性的作用

     保护字段,对字段的取值和设值进行限定。

8)字段就是女人,而属性就是男人。
9)三种属性
既有get方法也有set方法的属性我们称之为可读可写属性
只有get方法没有set方法我们称之为只读属性
只有set方法没有get方法我们称之为只写属性

10)对象的初始化
对象创建好后,依次的给对象的每个属性赋值,这个过程我们称之为。
11)构造函数
主要作用就是对 对象进行初始化。
构造函数其实就是一个函数,只不过是一个特殊的函数。
public 构造函数名()
{
代码;
}
1、没有返回值,连void也不能写。
2、构造函数的名称必须跟类名一致。

12)调用构造函数
new的作用:
1)、在内存的堆中开辟空间
2)、在开辟的堆空间中创建对象
3)、调用对象的构造函数

13)构造函数的特点
1)、可以重载
2)、类中默认会有一个无参数的构造函数,当你写了一个新的构造函数后,那个默认的无参数的构造函数就被干掉了。

22、静态和非静态的区别
静态成员需要被static修饰,非静态成员不需要加static。
问题1:在一个非静态类中,是否允许出现静态成员?
答:非静态类中是可以出现静态成员的。
问题2:在非静态函数中,能不能够访问到静态成员?
答:在非静态函数中,既可以访问到非静态成员,也可以访问到静态成员。
问题3:在静态函数中,能不能够访问到非静态成员?
答:静态方法只能够访问到静态成员。
问题4:在静态类中能否出现非静态成员?
答:不可以,在静态类中,只允许出现静态成员。
<!--在调用上,静态和非静态的区别-->
1、在调用实例成员的时候,需要使用对象去调用
2、在调用静态成员的时候,必须使用类名.静态成员名;
3、静态类是不允许创建对象的

什么时候使用静态类,什么时候使用非静态类?
如果你写的类属于工具类,可以考虑写成静态类。
静态的好处:资源共享。
静态类应该越少越好。

23、GC Gargbage Collection
当我们程序结束之后,GC会扫描整个内存,发现,如果有的空间没有被指向,则马上把这块空间销毁。

24、字符串
由于字符串的不可变性,所以,当我们需要给一个字符串进行大量的拼接、赋值等操作的时候,
会产生大量的内存垃圾,所以说,这么做是不合算的。
如果你需要对一个字符串进行大量的重复,拼接等操作,我们推荐使用StringBuilder

25、一个子类继承了一个父类,那么这个子类继承了父类的什么成员?
字段、属性、方法、构造函数

子类继承了父类的属性和方法
子类并没有继承父类的私有字段
子类并没有继承父类的构造函数,而是会默认的调用父类那个无参数的构造函数,
当你在父类中写了一个有参数的构造函数之后,那个默认的无参数的构造函数就被干掉了,
此时子类就调不到那个无参数的构造函数了。
解决办法:
1)、在父类中重新写一个无参数的构造函数。
2)、让子类去显示的调用父类有参数的构造函数。使用关键字:base()

26、继承的两个特性
1、单根性,一个子类只能有一个父类。一个儿子只能有一个爹。
2、传递性,爷爷有的,爹肯定有,爹有的,最终儿子也会有。

27、object类是一切类型的基类

28、new的用法()
1)、创建对象
2)、隐藏从父类那里继承过来的成员

student :sayhello

person:sayhello

person p=new person();

p.sayhello

 student s=new student();

s.sayhello();只能调用自己的,把父类的同名函数给隐藏了。

29、this的用法
1)、代表当前类的对象
2)、显示的调用自己的构造函数
public student(string name,int age,char gender,int age)
{

}


public student(string name,int age,char gender):this(name,age,gender,0)
{}

:base调的是父类

 

30、里氏转换
1)、子类可以赋值给父类。
2)、如果这个父类中装的是子类对象,那么可以将这个父类强转为子类对象。
student s=new student();
person p=s;//子类可以赋值给父类
person p=new Student();
栈 和堆


31、两个关键字
is:类型转换 ,如果转换成功,返回一个true,否则返回一个false。
as:类型转换,如果转换成功,则返回对应的对象,如果转换失败,返回一个null。

 


32、File类
Exist():判断指定的文件是否存在
Move():对一个指定的文件进行剪切操作
Copy():对一个指定的文件进行复制操作
Create():创建一个新文件
Delete():删除一个指定的文件

33、集合
集合相对于数组的好处
1)、长度可变
2)、可以添加任意类型的元素
不好的地方:
从集合中取值的时候必须要不停的做类型转换

34、集合的方法
Add():添加单个元素
AddRange():添加集合
Clear():清空集合中所有的元素
Remove():删除集合中的元素,括号里写谁,集合就删谁
RemoveAt():根据索引去删除集合中的元素
RemoveRange():删除一定范围内的元素
Insert():向集合的指定位置插入一个元素
InsertRange():向集合的指定位置插入一个集合
Contains():判断集合中是否包含某个元素
Sort():升序排列

35、集合的两个属性
Count :获取这个集合中实际包含的元素个数
Capcity:获取这个集合可以包含的元素个数

36、var推断类型
var可以通过变量的值来推断出来这个变量的类型。

 

37、Hashtable
在键值对集合中,键一定是唯一的,不能重复的,而值是可以重复的。

38、编码 GB2312---GBK
将字符串以什么样的形式保存为二进制,这个就是编码,UTF-8、ASCII、Unicode等,

产生乱码的原因:
我保存这个文件的时候所采取的编码格式跟我打开的时候所采取的编码格式不一致。

39、文件流

用来操作大文件
FileStream:用来操作字节的

StreamWriter StreamReader:用来操作字符的

2、由于我们在使用FileStream的过程当中,经常会忘记写Close() Dispose(),
所以微软提供给我们更为简单的方法帮助我们关闭流和释放流所占用的资源。
就是将创建FileStream对象的过程写在using(){}当中

40、装箱、拆箱
装箱:值类型-------->引用类型
拆箱:引用类型------>值类型
我们看两个类型之间是否发生装箱或者拆箱,首先要确定这两个类型之间是否存在继承关系。
如果存在,则有可能会发生拆箱或者装箱,
如果不存在继承关系,则不会发生装箱或者拆箱。
注意:装箱的时候使用什么类型装的箱,拆的时候也得使用对应的类型进行拆箱。(里氏转换)

 

posted @ 2017-06-30 06:19  高金顶  阅读(203)  评论(0)    收藏  举报