面向对象知识点集合
一、基础术语
1、对象
对象是具有数据、行为和标识的三部分编程结构。对象的数据包含在对象的字段、属性、事件中。对象的行为则由对象的方法和接口定义。对象通过class和struts定义。对象通过标识来区分是否相同。对象都是从类和结构中定义的模板实例化得到。均继承于Object类。
2、类
类定义了数据类型的数据和行为。可以根据这些来创建类的实例化对象。类支持继承但不可以多继承。类属于引用对象。最终类可以有很多个基类(类继承基类而导致)。可以实现多个接口。类和对象本质有不同,类是对象的类型,对象是类的实例。
3、分部类
分部类可以将类、结构、或接口的定义拆分到两个或多个源文件中,每个源文件都包括类定义的一部分,编译时把所有部分组合起来。使用partial定义。
4、结构
结构:定义基本于类相同,结构声明时,如果字段不是const或static,就无法初始化。结构不可以声明默认的构造函数(无参构造函数)或析构函数。可以声明带有参数的构造函数。结构副本由编译器自动创建和销毁,故不需要。结构不可以从类或其他结构继承。属于值类型,结构实例化不可以使用new,不可以继承,直接继承自System.ValueType。可以实现接口。
5、继承
类继承通过:号定义,:号后为要继承的单一的基类。由基类派生的类将会获得基类所有非私数据和行为(方法)以及派生类为自己定义的所有其它数据或行为(方法),所以派生类有两个有效类型:派生类型和基类类型。
6、抽象类
使用abstract定义用来继承的类和成员。抽象类不可以实例化,用来提供多个派生类可以共享的基类的公共定义(有点类似接口的意思),抽象类可以定义抽象方法,用abstract定义,但不可以有方法的实现。由抽象类派生的类必须实现抽象方法。
7、密封类
使用sealed关键字来定义防止继承以前标记的为virtual的类或某些成员。密封类主要用来防止派生。
8、多态
一个类可以用作多种类型,可以作自己的类型,可以做基类,可以实现接口时用作任何接口类型。
9、接口
接口使用interface定义,可以描述属于任何类或结构的一组相关行为,可由方法、属性、事件、索引器或这四种成员类型的任何组合构成。接口不可以包含字段,必须为公共的。可以同时继承多个接口,只能继承到方法名称和签名。
10、类成员
包括字段、属性、方法、事件、运算符、索引器、构造函数、析构函数、嵌套类型。
11、方法
方法包括一些类语句的代码块,方法在类或结构中声明,需要指定访问级别,返回值,方法名称以及任何方法参数。
12、构造函数
类和结构可以有多个接受不同参数的构造函数,可以使得可以设置默认值,限制实例化等功能。
13、析构函数
只能对类定义析构函数,并且一个类的析构函数唯一,无法继承和重载,无法调用,无修饰符和参数。
14、字段
包含在类或结构中的对象和值,字段可以使类和结构封装数据。一般用private,通过方法、属性或索引器访问字段。
15、常量
类和结构可以将常数声明为成员,用const修饰。
16、嵌套类型
在类或结构中定义的类型为嵌套类型,默认为private可以设置为其它修饰符,
17、静态类
静态类和类成员用于创建无需创建类的实例就能够访问的数据和函数,静态类成员可以用于分离独立于任何对象标识的数据和行为。
18、面向对象的思想主要包括:继承 多态 封装
封装:用抽象的数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型内部。
继承:子类拥有父类的所有数据和操作。
多态:一个程序中同名的不同方法共存的情况。
二、名词解释
1、.NET Framework(.NET 框架)
.NET 框架是Microsoft公司的一种新的便捷开发平台。.NET 框架有两个核心组件: CLR(公共语言运行库)和FCL(.NET Framework 类库)。.NET 框架好比一个航母,他支持的开发语言(C#、VB.NET、J#)就像航母上的战斗机。
2、CLR(Common Language Runtime)公共语言运行时
是 .NET Framework 的基础、相当于Java虚拟机。可以将运行库看作一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。事实上,代码管理的概念是运行库的基本原则。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。
3、FCL(Framework Class Library).NET框架类库
它提供了大量的实用类,如:System.console、System.IO等,它是一个综合性的面向对象的可重用类型集合,可以使用它开发多种应用程序,这些应用程序包括传统的命令行或图形用户界面 (GUI) 应用程序。
4、MSIL(Microsoft Inter Language)微软中间语言
所有面向.NET的语言都要先编译成IL, MSIL是将.Net代码转化为机器语言的一个中间过程。当用户编译一个.Net程序时,编译器将源代码翻译成一组可以有效地转换为本机代码且独立于CPU 的指令。当执行这些指令时,实时(JIT)编译器将它们转化为CPU特定的代码。这是为什么.NET能支持多种开发语言的原因。
5、CTS(Common Type System) 通用类型系统
不同编程语言定义的基本数据类型各不相同。既然要实现语言之间的“沟通”,就需要一个规范来实现“不同”数据类型(也许只是名称不同,而实质相同)间的交互操作,CTS就完成这个工作。如C#使用VB.NET开发的类库。
6、CLS(Common Language Specification) 公共语言规范
.NET平台上所有语言都应遵守的规则,用集合来说是多个语言规则的交集。如:在C# 中命名是区分大小写的,而VB.NET不区分大小写,这样CLS就规定,编译后的中间代码必须除了大小写之外有其它的不同这处。
7、JIT(Just-In-Time)
将MSIL编译成计算机能执行的二进制码。强调实时,实时执行时针对本地计算机的不同,被编译成本机代码。
8、Assembly程序集
是.NET程序的最小组成单位。每个程序集都有自己的名称、版本等信息。程序集通常表现为一个文件(.exe或.dll文件),这样的程序集被称为单文件程序集,这种程序集是最常见的。程序集也可以由多个文件组成,每个文件都是一个模块文件或者是一个资源文件,这样的程序集被称为多文件程序集。
三、比较记忆
1、访问修饰符。
|
public(公共的) |
访问不受限制 |
如果对类不指定访问修饰符,则类的默认访问修饰符为internal,但是类成员的默认访问修饰符为private。类只能修饰为public或internal类成员可以是所有。 |
|
protected (保护的) |
访问范围限定于它所属的类或从该类派生的类型 |
|
|
internal(内部的) |
同一程序集中的任何代码都可以访问该类型或成员 |
|
|
protected internal(内部保护的) |
访问范围限定于同一程序集或那些由它所属的类派生的类型 |
|
|
private(私有的) |
访问范围限定于它所属的类型 |
2、类与对象
一切事物皆为对象,类是一组具有相同属性和方法的对象的抽象,对象是类的实体,类是对象的抽象。对象是包含数据和操作的实体,它既定义数据元素,又定义可应用这些数据元素的操作。类是对一组具有相同属性和行为的对象的描述,类的内容称为类的成员。
3、静态类与非静态类
所谓静态类即在类的前面用static关键字来修饰的类。这样的类不能被实例化、是密封类、仅包含静态成员、不包含实例构造函数,静态类不能使用new创建实例,用类名就可能直接访问其成员,非静态类则不行。静态类中不能创建非静态的方法。即静态方法中只能创建静态方法,但在非静态类中可以调用静态方法,也可以创建静态成员,包括方法。
4、程序集和命名空间
可以把程序集简单理解为你的.NET项目在编译后生成的*.exe或*.dll文件,一个程序集可以跨越n个命名空间,一个命名空间也可以包含n个程序集。如果说命名空间是类库的逻辑组织形式,那么程序集就是类库的物理组织形式。
5、Const与Readonly
(1)、const 字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。(2)、const 字段是编译时常数,而 readonly 字段可用于运行时常数。(3)、const 默认就是静态的,而 readonly 如果设置成静态的就必须显示声明。(4)、const 对于引用类型的常数,可能的值只能是 string 和 null。readonly可以是任何类型
6、类与结构
(1)、结构是值类型,而类是引用类型。在结构中初始化字段是错误的。
(2)、向方法传递结构时,结构是通过传值方式传递的,而不是作为引用传递的。
(3)、与类不同,结构的实例化可以不使用 new 运算符。结构保存在栈上,而类保存在受管制的堆上。
(4)、结构不能声明默认构造函数或析构函数。结构可以声明带有参数的构造函数。
(5)、一个结构不能从另一个结构或类继承,而且不能作为一个类的基。类是重量级的,而结构是轻量级的。
(6)、所有结构都直接继承自 System.ValueType,所有的引用类型继承自System.Object。
(7)、类与结构都可以实现接口,都包括字段与方法。结构的执行效率更高。
7、装箱和拆箱
装箱(boxing)和拆箱(unboxing)机制使得在C#类型系统中,任何值类型、引用类型和object(对象)类型之间进行转换,这种转换称为绑定连接。装箱:将值类型转换成引用类型,拆箱:将引用类型转换成值类型。
8、接口和类
接口可以多继承,类只能单继承。接口描述可属于任何类或结构的一组相关行为。接口可由方法、属性、事件、索引器或这四种成员类型的任何组合构成。接口不能包含字段。接口成员一定是公共的。类 只支持单继承:类只能从一个基类继承实现。一个类可以实现多个接口。
9、值类型和引用类型
值类型和引用类型的区别在于,值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。值类型变量直接把变量的值保存在堆栈中,引用类型的变量把实际数据的地址保存在堆栈中,而实际数据则保存在堆中。类、数组、接口、委托是引用类型,struct与enum是值类型。
10、重载与override
|
规则 |
重载(overload) |
覆写(override) |
|
存在位置 |
存在于同一个类中 |
存在于有继承关系的不同类中 |
|
调用机制 |
编译时确定 |
运行时确定 |
|
方法名 |
必须相同 |
必须相同 |
|
参数列表 |
必须不同 |
必须相同 |
|
返回值类型 |
可以不相同 |
必须相同 |
|
泛型方法 |
可以重载 |
可以覆写 |
11、抽象类(abstract class)与接口(interface)
相同点:1、都不能被实例化,都可以通过继承实现其抽象方法;2、都是面向抽象编程的技术基础;
不同点:1、接口支持多继承,也就是说一个类可以实现多个接口;抽象类不能实现多继承;2.接口只能定义抽象规则或对象;抽象类即可以定义抽象的,也可以提供一些已经实现的成员或方法;3、接口只包含方法、属性、索引器、事件的签名,但却不能定义字段和包含实现的方法;抽象类可以定义字段、属性和包含有实现的方法;4.接口属于值类型;抽象类属于引用类型;
12、虚方法(virtual)与抽象(abstract)方法
相同:都可以在派生类中重写;不同点:虚方法在基类中有实现的部分,在派生类中可重写也可不重写;而抽象方法在基类中没有实现的部分,在派生类中必须重写;抽象方法只能在抽象类中,抽象类中可以有实休方法。
C#面向对象名词比较
1.重写(override)与重载(overload)
相似:他们都是重新定义一个方法的实现过程。
区别:
重写(override):是指对象之间的某个方法的重新实现,在一个类继承一个类时,当基类中某方法申明为virtual或abstract时,在派生类中使用override关键字重新申明一个方法,注意该方法
必须与基类中的参数返回值一样,一个类中对于基类某方法只能重写一次,调用基类还是派生类的实现是通过所定义的对象的类型来决定,和方法的参数无关
重载(overload):指对象中某个方法的重新实现,方法重载不需要关键字,只需要申明方法的参数类型或个数不一样即可,重载不能根据返回类型不同来重载,重载可以重载任意多次,没有限
制.调用哪个重载方法只和调用时的参数有关系
2(抽象)abstract和虚拟(virtual)
相似:在申明方法的时候,都能被重写。
区别:
抽象 abstract:可以申明类也可以申明方法,申明方法时不能和sealed一起申明,所申明的类必须被继承,申明的方法也必须被重写,申明时没有具体实现,实际上它起一个接口的作用
虚拟(virtual):只能申明方法,可以在申明方法的时候写对应的实现
3.类(class)和结构(struct)
相似:都是对象,就单个对象来说,类能实现的几乎结构都能实现
区别:
类:能被继承重写,可以有修饰申明(abstract,sealed),类实例化时使用的是栈中的内存(相对堆慢一点),类在赋值时,只是引用赋值(赋值后,改变被赋值对象的属性,其他跟着改)
结构:不能继承重写,不能有修饰,实例化使用的是堆中的内存(和普通变量一样),是值赋值
4.常数(const )和只读(readonly)
相似:相对于变量,其值基本不变
区别:
常数(const ):其值为硬编码,其值只能在申明时赋值,在类中使用const申明时,const好像隐式静态变量,每个实例不需要保存副本
只读(readonly):其值可以赋值,但只能在构造函数中赋值或申明时指定,申明为readonly的变量,每个类实例中可以有不同的副本
面向对象总结
1. 类中的数据和函数称为类的成员。
· 数据成员包含:字段、常量和事件。
· 函数成员包括:方法、属性、构造函数和析构函数、运算符以及索引符。
2. 使用new关键字可以建立类的一个实例。
Customer c; // 创建一个类的对象引用
c=new Deposit(); // 创建对象
或者
Customer c= new Deposited();
3. 静态变量和实例变量
· 带有”static”修饰符声明的变量称为静态变量。
· 不带有”static”修饰符声明的变量称为实例变量。
4. 只读字段和常量字段
· 只读字段可以在构造函数中才赋值。“readonly”是只读字段的关键字。
· 常量字段只能在声明时赋值常量说明前还加const 保留字;
5. 名称空间是.NET避免冲突的一种方式,名称空间可以按逻辑对类进行划分。
6. 名称空间的申明:
Namespace qualified-identifier namespacebody ;
名字空间隐式地使用public修饰符,在使用时不允许出现任何访问修饰符。
7. 名称空间的声明可以采用嵌套的方式和非嵌套的方式。
8. 组件是一个或多个类的集合体,在.NET中组件又被称为程序集(assembly)。
9. 组件的引用:
· 在同一个解决方案内,
· 在不同解决方案里面使用。
10. 封装是把类的内部隐藏起来,以防止外部世界看见的一个面向对象的概念。
11. 通常采用的访问修饰符有五种:
· public :全公开
· protected:给当前类的儿孙类公开
· internal protected:本项目中的儿孙类公开
· internal:本项目内部公开
· private:除了本类中,对外完全封闭
12. C#只允许单继承。
13. 继承性的语法:
public class soldgoods:goods
14. 多态性是指同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。
15. 多态性的作用:
· 增强了操作的透明性
· 可理解性和可扩展性
· 增强了软件的灵活性和重用性。
16. 多态性通过派生类覆写基类中的虚函数型方法来实现。
17. C#支持两类多态性:
· 编译时的多态性
· 运行时的多态性
18. 虚方法是指类中的方法声明前加上virtual修饰符:
public virtual bool Withdraw(…);
19. 重载的特点是(两必须一可以):
· 方法名必须相同
· 参数列表必须不相同
· 返回值类型可以不相同
20. 重写(覆写)的语法:
public override bool Withdraw(…)
覆写的时候我们使用的是关键字override来完成的
在覆写的时候要三个要求(三相同):
· 相同的方法名称
· 相同的参数列表
· 相同的返回值类型
21. 类中包含抽象方法,那么类就必须定义为抽象类。
· 抽象方法声明的基本的语法是:
public abstract bool Withdraw(…);
22. C#中所有的类都直接或间接继承自System.Object类,这使得C#中的类得以单根继承。
23. 接口(interface)用来定义一种程序的协定。
24. 构造函数是类的一种特殊方法。
· 构造函数的方法名和类名相同;
· 构造函数没有返回类型;
· 构造函数的主要作用是完成对类的对象的初始化工作;
· 在创建一个类的新对象时,系统会自动调用该的构造函数初始化新对象;
· 如果没有显式定义,那么系统提供一个不带任何参数的Public的构造函数。
25. C#的类有两种构造函数:实例构造函数和静态构造函数。
· 不带参数的构造函数: public product()
· 带参数的构造函数:public product(int t,string r)
26. 构造函数可以重构。
27. 构造函数可以相互转换。
28. 属性 :
· 自动使用get 标识符进行读;
· 自动使用set 标识符进行写
浙公网安备 33010602011771号