C#基础框架总结一览无余.docx
《C#基础框架总结一览无余.docx》由会员分享,可在线阅读,更多相关《C#基础框架总结一览无余.docx(18页珍藏版)》请在冰豆网上搜索。
C#基础框架总结一览无余
数据类型
值类型
简单值类型
名称
CTS类型
说明
范围
前界
后界
备注
整数类型
sbyte
System.Sbyte
8位有符合整数
(-2^7~2^7-1)
-128
127
有符号
short
System.Int16
16位有符合整数
(-2^15~2^15-1)
-32768
32767
int
System.Int32
32位有符合整数
(-2^31~2^31-1)
-2.147E+09
2.15E+09
long
System.Int64
64位有符合整数
(-2^63~2^63-1)
-9.223E+18
9.22E+18
byte
System.Byte
8位无符合整数
0~2^8-1
0
255
无符号
ushort
System.Uin16
16位无符合整数
0~2^16-1
0
65535
uint
System.Uint32
32位无符合整数
0~2^32-1
0
4.29E+09
ulong
System.Uint64
64位无符合整数
0~2^64-1
0
1.84E+19
浮点数(实数)
float
System.Single
32位单精度浮点数
double
System.Double
64位双精度浮点数
decimal
System.decimal
128位双精度浮点数
名称
CTS类型
值域
布尔型
bool
System.Boolean
True/False
字符型
char
System.Char
表示一个16位的Unicode字符
放在单引号中
复合值类型
名称
关键字
结构
struct
枚举
enum
switchcase
引用类型
名称
CTS类型
说明
方法
内置引用类型
object
System.Object
基类型,CTS中的其他类型都是从它派生而来
Equal()、GetHashCode()、GetType()、ToString()等
String
System.String
Unicode字符串类型
完成字符串连接、定位子串定位等
放在双引号中
数组
int[]nVar=newint[100]
类
class
接口
interface
备注:
1、值类型与应用类型的区别
值类型:
包括简单值类型(系统已定义好的如:
数值类型、字符型、布尔型)和复合值类型(结构、枚举)
引用类型:
包括类、接口、数组以及内置引用(objiec、string)
值类型:
数据长度固定
存放于栈内
引用类型:
数据长度可变
存放于堆内
2、栈与堆的区别
数据结构
栈:
机器系统提供,栈是系统数据结构,对于进程/线程是唯一的。
堆:
设计工具(C/C++/C#)函数库提供,堆是函数库内部数据结构,对于进程/线程不一定唯一。
资源分配
由编译器自动分配、释放
一般由程序员分配释放。
用new等分配得到的就是在堆上。
功能特点
栈是系统提供的功能,特点是快速高效,缺点是有限制,数据不灵活;
而栈是函数库提供的功能,特点是灵活方便,数据适应面广泛,但是效率有一定降低。
转义字符
意义
\'
单引号
\"
双引号
\\
反斜杠
\o
空字符
\a
警告
\b
退格符
\f
换页符
\n
换行符
C#的转义字符
\r
回车符
\t
水平制表符
\v
垂直制表符
运算符
类型
符号
示例
意义
算数运算符
+
加
-
减/取负
*
乘
/
除
%
a%b
取余(取a除b的余数)
++
a++
累加
--
a--
递减
字符串运算符
+
将字符串合并为新字符串
赋值运算符
=
a=b
将右边的值连到左边
+=
a+=b
将右边的值加到左边
-=
a-=b
将右边的值减到左边
*=
a*=b
将左边的值乘以右边
/=
a/=b
将左边的值除以右边
%=
a%=b
将左边的值对右边取余数
逻辑运算符
<
a
>
a>b
<=
a<=b
>=
a>=b
==
a==b
!
=
a!
=b
&&
a&&b
与ab都为真时
||
a||b
或a或b为真时
!
!
a
非当a为假时
位运算符
&
a&b
按位与运算
|
a|b
按位或运算
^
a^b
按位异或运算
<<
a<<
向左移位
>>
a>>
向右移位
~
~a
按位取反
其他运算符
new
newClass1()
创建一个类的实例
typeof
typeof(int)
获取数据类型说明
Obj.Method()
获取对象的方法或属性
?
:
(expr1)?
(expr2):
(expr3)
若expr1则expr2;否则expr3
类、接口、多态、重载
名称
解释
定义
范式
类
类是一种数据结构;
类是现实对象或关系的模拟(抽象),包含静态属性和动态方法;
类是具有相同或相似结构、操作和约束规则的对象集合。
声明类
class-modifiersclassclass-name
{
//属性
//方法
}
说明class-modifiers:
类修饰符,见下表,class-name为类名
对象
对象是类的具体化实例(类的实例化:
如“Students=newStudent()”)
创建类实例
class-nameobject-name=newclass-name([parameter-list])
class-name:
类名
object-name:
对象名(类的实例名)
域
域又称成员变量,表示存储位置。
如privateintnAge
属性(或域)定义
attribe-modifierdata-typeattribute-name;
attribe-modifier:
修饰属性,包括:
public、private、protect
data-type:
数据类型
attribute-name:
属性名称
属性
客观实体性质的抽象,属性是一个特殊接口,属性提供了3种接口:
①只读(get)②只写(set)③可读可写(get和set)。
get():
取值函数,获取域的值;
set():
为域赋值,使用value关键字获取用户输入
用“.”实现对属性或方法的访问s.strname="张三"s.SetAge(20)表示对SetAge方法进行赋值
静态属性
类的属性,而非对象的属性
static定义静态属性
使用static定义静态属性
如:
publicstaticintnCount;//静态属性,学生人数
方法
实体所能执行的操作,方法定义:
方法修饰符返回类型方法名(){...},如“publicvoidSetAge(intp_nage){...}”
方法定义
method-modiffierreturn-typemethod-name(parameter-lish);
method-modifier:
访问属性,包括:
public、private、protect
return-type:
返回类型
method-name:
方法名称
parameter-lish:
参数列表
静态方法
类所具有的行为,而非对象具有的行为
static声明静态方法
使用static声明静态方法,static放在方法返回类型前
method-modifierstaticreturn-typemethod-name(parameter-list){…}
注意:
1>访问属性很少有private
2>在静态方法中不能使用this关键字,因为this是指实例化后的对象本身,而静态方法的调用是不需要实例化对象的。
访问父类方法
使用base关键字
base.父类方法名();
方法参数
调用方法时传递给它的变量。
主要分为两类:
①传递数据值:
把数据值传递给方法;
②传递数据的地址:
把变量的内存地址传递给方法。
ref传递引用参数(引用传递)
out传出参数值
总的说来,Ref和Out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。
稍有不同之处是:
1>使用Ref型参数时,传入的参数必须先被初始化。
而Out则不需要,对Out而言,就必须在方法中对其完成初始化。
2>使用Ref和Out时都必须注意,在方法的参数和执行方法时,都要加Ref或Out关键字。
以满足匹配。
3>Out更适合用在需要Return多个返回值的地方,而Ref则用在需要被调用的方法修改调用者的引用的时候。
params传递多个参数
params关键字指明一个输入参数被看作一个参数数组,这个类型的输入参数只能作为方法的最后一个传入参数。
PublicvoidSetHobby(paramsstring[]_strArrHobby)
构造函数
与类同名的方法,不过没有返回数据类型,其功能时在实例类时实现初始化工作
析构函数
~类名(),实现“收尾”工作,如关闭数据库连接等
继承
本质代码重用,用“:
”实现继承(子类:
父类)备注:
C#只支持单继承,即一个类只能继承一个父类。
格式
boy-class-modifiersclassboy-class-name:
father-class-name
重载
指允许存在多个同名函数,而这些函数的参数不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。
重载属性
重载属性解决了父类与子类相同属性冲突的问题。
1>重载属性:
子类具有父类相同的属性。
2>在某种意义上,重载可理解为“覆盖”,即以子类的定义为准。
3>在重载时,属性名称、数据类型、访问级别都应与父类一致。
4重载后子类中的属性访问级别不能超越父类,即父类中只有set(或get),那么子类中也只能有set(或get),如果父类有set和get,那么子类可以只有一个,也可两个都有。
重载方法
同样的方法名,完成功能相似、具体实现不同的任务
重载运算符
重载后的运算符既具有原来功能又具有重载(重定义)的新功能
抽象方法
只包含方法的定义,没有具体实现的方法,需要其子类或子类的子类来具体实现
用abstract定义抽象方法和抽象方法
可理解为“虚拟函数”
用abstract定义抽象方法
publicabstractvoidTrin();
抽象类
包含一个或多个抽象方法的类,抽象类不能实例化,因为包含了没有具体实现的方法。
publicabstractclassplayer{...}
子类继承抽象父类后,可以使用override关键字覆盖抽象类中的抽象方法,并作具体实现。
PublicoverridevoidTrain(){...}
多态
父类定义抽象方法,在子类对其进行实现后,将子类赋值给父类,然后在父类中通过调用抽象方法来实现子类的具体功能
可理解为“同一指令下,以多种形态执行”,同一对外接口完成不同功能
区分多态和重载
共同点:
同一对外接口完成不同功能。
重载:
是指允许存在多各同名函数,而这些同名函数参数不同。
(对于编译器来说,这些同名函数已是不同函数,调用地址在编译期就绑定)这称为“早绑定”或“静态绑定”。
多态:
是指子类重新定义父类的虚函数。
(父类根据赋给它的不同子类,动态调用属于子类的该函数,这样的函数调用在编译期无法确定的,而编译器只有等到函数调用的那一刻,才会确定要调用的具体函数)这称为“晚绑定”或“动态绑定”。
接口
接口和抽象类非常类似,它定义了一些未实现的属性和方法,所有继承它的类都继承了这些成员。
可以把接口理解为一个类的模板。
声明接口
access-modifierinterfaceinterface-name
{
//interfacemembers(接口的成员访问级别规定为public,故不用在声明时实用访问级别修饰符。
)
}
接口实现
在声明接口后,类就可以通过继承接口来实现其中的抽象方法,使用冒号“:
”实现继承,将待继承的接口放在类后面。
class-modifiersclassclass-name:
interface-name
{
...
}注意:
实现接口的方法中不需要使用override关键字。
接口和抽象类的关系
相似:
①两者都包含可以由子类继承的抽象成员;
②两者都不能直接实例化。
区别:
接口用于定义组件间的行为合同。
抽象类用于定义类层次的共同基类。
①抽象类除拥有抽象成员外,还可拥有非抽象成员;而接口所有成员都是抽象的。
②抽象类的抽象成员可以是私有的,而接口的成员一般都是公有的。
③接口不能包含构造函数、析构函数、静态成员和常量。
④抽象类只支持单继承,即一个子类只能继承一个父类。
而一个子类却可以继承多个接口
命名空间
是相关类的逻辑层次结构,便于更好的管理“类”。
,类和命名空间的关系,可理解为“文件”和“文件夹”的关系。
修饰符
说明
abstract
抽象类,不能创建该类的实例,只能作为基类
sealed
该类不能被继承
new
用于声明嵌套的类
private
用于声明私有嵌套类,只能在定义它的类中访问这个类
private:
私有成员,在类的内部才可以访问。
protected
用于声明保护型潜逃类,只能在定义的类,以及该类的子类中访问这个类
protected:
保护成员,该类内部和继承类中可以访问。
public
该类可以被任何其他类访问(公共类)
public:
公共成员,完全公开,没有访问限制。
internal
该类只能从同一个程序集的其他类中访问(C#的默认类为internal)
internal:
在同一命名空间内可以访问。
流程控制
名称
语句
形式
意义
顺序结构
从上向下顺序执行
无条件跳转
分支机构
if语句实现分支
if(判断){处理}
如果…则…
if(判断){处理}else{处理}
如果…则…,否则…
if…elseif…else
if…else嵌套进行多条件判断
switch语句实现分支
switch(variable)
{
casevalue1:
statement1
break;
casevalue2:
statement2
break;
...
default:
statement
break;
}
如果case分支种没有break语句,即使匹配了此分支,程序也要执行下一个case分支,,直到遇到break为止。
如没有任何分子满足条件,程序最后进行default分支
循环结构
while语句实现循环
while(条件){...}
如果…就…表示如果符合条件就执行循环
do{...}while(条件)
直到…为止…表示直到满足条件就退出循环,至少会执行一次
for语句实现循环
for(expressionl1;expressionl2;expressionl3)
{
statement
}
expressionl1:
条件初始值
expressionl2:
判断条件
expressionl3:
执行statement后要执行的语句,用来改变条件,如累加等。
Statement:
符合条件时的执行语句
使用break/continue控制循环
break可以用于中断循环,从循环中跳出。
Continue可以提前结束一次循环过程中执行的循环体,直接进入下一次循环。
备注:
条件编译
#define
建立一个预定义符号,必须放于文件首行,并在整个文件中有效
#undef
取消一个预定义符合
#if
条件判断指令
#else
#elif
#endif
异常处理
try、catch、finally
try{...}
catch{...}
finally{...}
当try{...}代码块出现异常,将自动转向catch{...}代码块,并执行其中的内容,无论是否出现异常,程序都会执行finally{...}中的代码。
规则要求
建议
命名总体原则
简单明了,便于理解
地球人都能明确
Pascal大小写规范
单词第一个字母大写,其他字母小写。
Camel大小写形式
除第一单词外,其他所有单词第一个字母写其他字母小写。
C#要求
以字母或下划线开头
字母开头,并尽量使用单词或短语,不建议缩写
只能包括字母、数字、下划线
短语
类命名
Pascal规范
方法命名
Pascal规范
变量、参数
Camel规范
类属性
数据类型,如n(整数)、str(字符型),后跟名词或名词短语
参数
以下划线"_"开头或P开头
P开头