2020年了,作为本年度第一周,最近几天在看:《C# 入门经典(第7版)》 C# 6.0 & Visual Studio 2015 ,相关第一章节主要oop语言部分做好记录,这部分主要重点及难点在于:第6章:函数、第8章:面向对象变成简介、第9章:定义类、第10章:定义类成员、第11章:集合、比较和转换、第12章:泛型、第13章:高级C#技术,其中这些部分存在还待继续熟悉并熟练操作:
- 1 implicit \explicit 不熟悉
- 2 委托 predicate、comparision没用过
- 3 事件
- 4 特性
- 5 lambda表达式
- 6 extern 定义
(一)类(class)
(1)类的修饰符: internal 和 public
- 1 internal:表示只能在内部同一个程序集才能够进行访问
- 2 public:可以供外部调用
(2)类的访问修饰符: abstract 和 Sealed
- 1 abstract:抽象类:不能被直接实例化,只能继承,可以有抽象成员;
- 2 Sealed:密封类,不能被继承
(3)类的继承
类可以继承基类和接口或单独继承基类,单独继承接口,但是派生类只能继承一个基类,但是接口可以继承多个,如果派生类既要继承基类也要继承接口,那么基类必须要写在前面,接口写在后面以逗号隔开
(二)构造函数
调用执行顺序:
- 1 实例化派生类(子类)会先执行System.Object.Object()构造函数
- 2 在执行基类(父类)构造函数
- 3 最后执行本身构造函数
说明:Base用法:在派生类中调用父类构造函数,会匹配父类构造函数参数;this用法:会调用本类中匹配的构造函数,然后在调用本身默认构造函数
(三)类的成员
成员访问级别修饰符:
- 1 public:公共的,任何地方都可以访问
- 2 private:默认成员访问级别,私有的,只有在当前类才能够访问
- 3 internal:内部的,同一程序集中可以访问
- 4 protected:受保护的,只能在类或派生类中访问
- 5 protected internal:同一程序集派生类中访问
定义类字段:
- 修饰符 [可选] 字段名 修饰符上面说了 [可选]:readonly(只读,不能复制)、static(静态,只能通过类直接访问)、const(常量,不能修改成员的值)
定义类的方法:
- 关键字:
- 1 virtual 虚拟的,方法可以重写
- 2 abstract 抽象的,方法在非抽象类中重写(抽象类中)
- 3 override 重写基类方法
- 4 extern 方法定义在其他地方
定义类的属性:
- 与字段类似,但属性可以使用virtual、override和abstract关键字;
(四)接口(interface)
(1)接口的修饰符: internal 和 public
修饰符和类一样,但是接口不能出现类的访问修饰符(abstact抽象和密封访问修饰符),接口没有继承System.Object,并且接口不能够直接实例化。
(2)接口成员
- 1 不允许使用访问修饰符public,private,protected和internal,所有接口成员都是隐式公开的;
- 2 接口成员不能包含代码体;
- 3 接口不能定义字段成员;
- 4 不能用关键字static,virtual或Sealed来定义接口成员;
- 5 类型定义成员是禁止的。
(五)接口和抽象类
相似点:
- 1 都可以被派生类继承
- 2 都不能直接实例化,但可以声明这些类型的变量
- 3 可以使用多态性把继承这两种类型的对象指定给它们的变量
区别:
- 1 派生类只能继承一个基类,即只能直接继承自一个抽象类(但可以用一个继承链包含多个抽象类)
- 2 类可以继承多个接口
- 3 抽象类可以拥有抽象成员(没有代码体,且必须在派生类中实现,否则派生类本身必须也是抽象的)
- 4 抽象类可以是非抽象成员(虚拟的,可以在派生类上重写)拥有代码体
- 5 接口成员是公共的(因为他们的目的是在外部使用),抽象类成员可以是私有的(只要它们不是抽象的)、受保护的、内部的、受保护的内部成员
- 6 接口不能包括字段、构造函数、析构函数、静态成员和常量
什么情况下使用抽象类和接口:
抽象类主要用作对象系列的基类,这些对象共享某些主要特征,例如共同的目的和结构。接口则主要用于类,这些类存在根本性的区别,但仍然可以完成某些相同的任务。例如:普通客车抽象类:大众、宝马、奔驰、旅游游轮等,货车抽象类:后八轮、小精钢等,他们各自有各自的特性,普通客车抽象类他们的派生类可以继承都是接送人接口,而货车继承都是拖货接口。