C#复习④
2016年6月16日
12:37
Main Classes and Structs 类和结构体
1.Contents of Classes
字段,常量,方法,构造函数,析构函数;
特性,事件,索引器,重载运算符;
嵌套类型(类,接口,结构体,枚举类型,委托)
2.Classes 类
栈类:数组、栈指针、构造函数、压栈、出栈
类实例对象分配在堆上;
类对象必须通过new关键字实例化;
类可以继承自其他类(C#不支持多继承);
类可以实现多个接口(C#支持多个接口继承)
3.Structs 结构体
点结构体:点坐标(x,y)、构造函数、MoveTo方法
结构体实例对象分配在栈上;
可以通过new关键字构造实例对象;
字段在声明时禁止初始化;
不能声明无参构造函数;
不能继承其他结构体或被继承,但是可以实现多个接口
4.Visibility Modifiers 可见性修饰符
Public visible where the declaring namespace is known 在当前命名空间下可见
Private only visible in the declaring class or struct仅在类或结构体定义域内可见
类和结构体默认的字段均为private,方法默认为public
5.Fields and Constants 字段和常量
· 在类中,字段在声明时初始化是一个可选的(可以初始化,如果没有初始化则编译器会进行默认的初始化);
· 对于常量,在声明时必须进行初始化,否则编译时会报错;
· Readonly 字段必须在声明时初始化或者在构造函数中进行初始化;数值咋编译时期不可参与运算;数值在之后不可改变;占用内存空间
6.静态字段和常量
静态字段属于类不属于实例对象(在类没有实例化任何对象时,静态字段已经产生,静态字段是这个类的固定属性,可以被通过该类构造的所有对象共享)
常量不能够声明为静态
static readonly需要注意的一个问题是,对于一个static readonly的Reference类型,只是被限定不能进行赋值(写)操作而已。而对其成员的读写仍然是不受限制的。
推荐:http://www.c-sharpcorner.com/UploadFile/2072a9/constant-vs-readonly-vs-static-keywords-in-C-Sharp/
7.Methods 方法、函数、过程
方法:可能有返回值也可能没有返回值
过程:没有返回值
函数:有返回值
8.Static Methods 静态方法
静态方法实现对静态字段的处理
9.Parameters 参数
两种传参方式:值传递、引用传递
用Ref型参数时,传入的参数必须先被初始化。而Out则不要要,对Out而言,就必须在方法中对其完成初始化。
用Ref和Out时都必须注意,在方法的参数和执行方法时,都要加Ref或Out关键字,以满足匹配。
Out更适合用在要要Return多个返回值的地方,而Ref则用在要要被调出使用的方法修改调出使用者的引用的时候。
ref修饰符:参数可进可出
out修饰符:参数只出不进
10.Variable Number of Parameters 可变数组参数
C#语法规定,params后边必定跟数组。
作用是把不定数量的、同类型的参数装入这个数组中
string也是object的子类,所以可以用一个object[]数组代替string[]
11.Method Overloading 方法重载
方法重载:在一个类中两个或者两个以上的方法具有相同的函数名
并且满足参数不同或者参数类型不同或者 不同参数定义(out/ref)成为方法的重载。
重载不要求函数返回类型不同,也就是说当两个函数只有返回类型不同时不满足重载的条件!
满足条件的重载:
Illegal overloading:
12.Constructors for Classes 类的构造函数
类的构造函数有可见性修饰符,没有返回值,且函数名与类名相同;
当声明类时若不主动添加构造函数,则编译时编译器会自动添加一个默认的构造函数,并且这个构造函数无参。
当声明一个类的时候手动添加了构造函数,那么编译器不再为该类添加无参构造函数,也就是之后在实例化对象时手动调用无参构造函数会报错。
一个类可以有多个构造函数,这些构造函数没有返回值,并且函数名相同。按照之前的重载定义,一个类中的所有构造函数互为重载函数
对于构造函数,可以选择对字段进行初始化。当未初始化时,默认的构造函数会按照下面的规则进行对各个字段的初始化。
13.Constructor for Structs 结构体的构造函数
结构体的构造函数有可见性修饰符,没有返回值,构造函数名与结构体名相同;
对每一个结构体都会有一个默认的无参构造函数;
程序员不能为结构体创建一个带参的构造函数;
结构体的构造函数必须初始化所有的字段
14.Static Constructors 静态构造函数
静态构造函数必须是无参的,没有可见性修饰符;
一个类或者结构体有且只能有一个静态构造函数;
静态构造函数用来初始化静态字段;
当该类型被第一次使用时,静态构造函数立刻被调用
15.Destructors 析构函数
在一个实例对象被垃圾回收之前调用析构函数;
析构函数没有可见性修饰符;
结构体没有析构函数;
16.Indexers 索引器
索引器包括可见性修饰符、返回值、函数名、索引类型
17.Operator Overloading 运算符重载
运算符重载需要注意对某个运算符重载后要对其相应的另一个运算符重载。比如重载了加法运算符,相应的也要重载减法运算符;
可以被重载的运算符:
数学运算符:+、-、*、/、%、++、--
关系运算符:==、!=、<、>、<=、>=
位运算符:&、|、^
其他运算符:!、~、>>、<<、true、false
重载运算符必须返回一个函数值;
18.Conversion Operators 类型转换重载
显式类型转换 Explicit conversion
隐式类型转换 Implicit conversion
推荐:https://msdn.microsoft.com/en-us/library/09479473(v=VS.80).aspx
class SampleClass
{
public static explicit operator SampleClass(int i)
{
SampleClass temp = new SampleClass();
// code to convert from int to SampleClass...
return temp;
}
}
19.Nested Types嵌套类型
内部类可以访问外部类的所有成员变量和成员函数;
外部类之能访问内部类中可见性为public的成员变量和成员函数;
只有当内部类为public时,其他类才可以访问;
访问内部类需要通过外部类名加上点运算符 "."加上内部类名