上次我们讲的是一些C#前面的基础知识,一些比较重要的索引委托事件接口泛型将会接下来慢慢讲解,这也是一个自我复习的过程,嗯对,就是这样的。
先来 深入理解类,掌握一些类的使用方法和特性。
静态字段:被类的所有实例共享,所有实例都访问内存的同一位置,直接使用点运算符就可以访问公共类的实例成员哦,D.Mem2 = 5;
条件运算符: value>100 ? 100:value 由一个判断确认bool值,条件为真选择前面,条件为假选择后面的,三元运算符。
实例构造函数:用于初始化类的实例状态,名称与类名相同,不能有返回值,可以带参数,可以被重载。没有显式,声明会有隐式的默认构造函数。
静态构造函数:类只能有一个静态构造函数,不能带参数,不能有访问修饰符,其他同上哦。
析构函数:执行在类的实例被销毁之前需要的清理或释放非托管资源的行为(通过Win32 API获得的文件句柄,或非托管内存块)。
This关键字:只能用在(实例构造函数,实例方法,属性和索引器的实例访问器)这些类成员的代码块中,目的是为了用于区分类的成员和本地变量或参数,作为调用方法的实参。
属性:是一组 set get 访问器,不分配内存,通常表示单个数据成员,例: int value {set;get;}
索引器:是一组 get set 访问器,不分配内存,通常表示多个数据成员,可以重载,必须使用this关键字。例:ReturnType this {Type param1,…}
分布类:每个分布类的声明都含有一些类成员的声明,可以在同一文件中,也可以在不同文件中,标明 partial class 类似的有局部结构和局部接口
分布方法:分布类的内在方法,关键字partial ,必须给出签名和返回类型,返回值为空,签名不能包括访问修饰符(隐式私有),内部设置一个公共方法方便调用,声明和实现分离;声明=声明; 实现=声明{ }
类和继承
基类和派生类:创建派生类时,派生类名:基类名,调用派生类可以使用基类的方法。实例化继承类可以调用基类和继承类的方法。类只能单继承,使用new关键字可以屏蔽基类成员(同类型名称)(可使用base.成员名访问),也可以屏蔽静态成员,但是编译器会警告。
虚方法和覆写方法:virtual 虚方法 override 覆写方法相同的签名和返回类型,不能覆写static方法或者非虚方法,使用new关键词可以屏蔽,基类继承类,虚方法覆写方法。
构造函数的执行:每个类在执行自己的构造函数之前执行它自己的构造体函数之前执行它的基类构造函数:base关键字指明使用哪一个基类的构造函数,:this指明使用哪一个类
抽象成员:使用abstract关键字,必须是基类且被覆写的函数成员,(属性,方法,索引,事件)不包含实现代码块。不能实例化,抽象类包含抽象方法,派生类覆写抽象类和抽象方法
密封类:关键字 sealed 独立的类,不能用作基类
静态类: 所有成员必须是静态的,可以有一个静态构造函数,不能有实例构造函数,不能创建该类的实例,隐式密封,不能继承
扩展方法:允许编写的方法和声明它的类之外的类关联。声明扩展方法的类必须static,扩展方法本身必须是静态的,参数列表=this + 扩展类的名称,可用原方法直接调用扩展方法
表达式和运算符和Using语句
条件运算符:?:对一个表达式求值,bool真假选择前后值之一
隐式转换和强制转换:LimitedInt li = (LimitedInt)500;
运算符重载,Typeof运算符,打印公有字段和方法名称 Type t = typeof(someClass) .GetField .GetMethod
Using语句:using指令引用命名空间和using语句包装资源的使用不一样,using (ResoureType Identifier = Expresssion)Statement 分配资源 使用资源
结构:
结构是值类型,隐式密封,可以被重载,变量不为空,不能初始化字段,不能引用同一对象,可以有实例构造函数和静态构造函数,不能有析构函数,struct StructName{ }
枚举:
枚举是值类型,enum TrafficLight{ } :ulong 跟在枚举名后面可以设置底层类型,位标志,不能对成员使用修饰符,不能比较不同类型的枚举
数组:
数组是一个变量名称表示的一组同类型的数据元素,一旦创建,大小固定,声明和初始化,交错数组(不能在声明初始化语句中初始化顶层数组之外的数组),后续按维度初始化,foreach语句循环输出数组,数组协变(不是数组类型也可以赋值给数组元素),数组克隆, 一维,矩形,多维,交错
委托:
委托是持有一个或多个方法的对象。关键词 delegate,调用有多个返回值的委托方法,只返回最后一个返回值 。
匿名方法:初始化委托时内联声明的方法,delegate(Parameters){ImplementationCode} 参数及匿名方法的实现限制在方法体内
Lambda表达式:删除delegate关键字, 参数列表和主体间放置=>符号
事件: 高级事件访问器
事件就像是专门用于某种特殊用途的简单委托,事件包含了一个私有化委托,无法直接访问委托,对于事件只能添加删除,调用事件处理程序,+= 和 -=是唯一允许的操作,
public event EventHandler CountedaDozen,声明委托,类,创建事件,触发事件及结果,订阅事件,声明事件处理程序。标准事件采用系统预定义委托。扩展系统预定义泛型委托
接口:
接口是指定一组函数成员而不实现他们的引用类型。接口必须全部实现,一个方法可以实现多个接口。接口可以继承接口。
转换:
隐式转换,显式转换和强制转换,装箱拆箱,is只可用于装箱拆箱,不能用于用户自定义,as不抛出异常,转换失败为空。
泛型:
让多个类型,共享一组代码。(类,结构,接口,委托,和方法),泛型接口实现必须唯一
协变:可将派生类的对象实例赋值给基类变量
逆变:可将基类的对象实例赋值给派生类变量