首页 > 代码库 > c# 基础复习1

c# 基础复习1

1. 类和对象


1.1 类和对象的概念
  类:对象的类型,它不同于 int 等基本数据类型,因为类具有行为;也可以说是具有相
  同特征和行为的一组对象的集合。
  对象:对象是一个个你能看得见,摸得着的实体,是实实在在的事物,具有相同特征和
  行为的对象可以抽象成类。
1.2 定义类的语法
  [modifier] class ClassName
  {
    //[field,Method]
  }
1.3 如何创建对象
ClassName name=new ClassName();
1.4 命名空间:
作用:用于管理类;
声明 namespace;
导入 using。

2. 封装


2.1 封装的概念
  封装指的是将东西包装在一起,然后以新的完整的形式呈现。对于面向对象而言,封装
  就是将方法和字段包装到一个程序单元中,并且这些单元以类的形式实现。那么我们说
  的再直白一些,封装就是将字段私有化,提供公有的方法来访问私有的字段,那么这样
  的一个类就是实现了封装特性的类。
  封装是面向对象编程的重要概念之一。通过封装可以隐藏类的实现细节,同时,可以通
  过访问相对公开的属性和方法与外界进行信息的交流。
2.2 属性语法
访问修饰符 类型 属性名称
{
属性访问器(包含 set 和 get)

}
set 访问器负责设置字段的值
get 访问器负责获取字段的值

2.3 构造函数
与类名相同;
没有返回类型,无需标识 void;
可以无参数也可以有参数;
作用:主要完成对象的初始化工作。
2.4 方法重载
1、重载方法同名且在同一个类中。
2、重载方法的参数的类型或个数不同。

3. 继承:
3.1 继承的概念
面向对象三大特性之一,继承是两个类之间的关系:子类继承了父类,就天然拥有了
父类所具有的特性(构造函数、静态成员、私有成员除外)。
3.2 继承的价值
继承,既实现了代码的重用,又模拟了现实世界的关系,在面向对象编程中,强调一
切皆对象,继承正好模拟了对象间的关系。而且,继承使得父类与子类的层次结构清
晰,子类只需用关注自己的状态和行为,父类的状态和行为则交给父类去处理。
3.3 继承的语法
在声明子类的时候,在类名右边加上冒号,冒号右边写上父类的类名。
3.4 继承的特性
1、单根性 2、传递性。
3.5 继承与构造函数
子类的构造函数被调用时,会首先调用父类的构造函数。
3.6 base 用法
1、使用 base()调用父类构造函数。
2、使用 base 调用父类成员。

3.7 里氏替换原则
简单的解释,就是子类对象可以替换父类对象。
关键字is和as:使用is判断对象类型,用as进行类型转换。

4. 多态
4.1 多态概念
多态是类的三大特性之一。封装、继承、多态这三大特性是相互关联的。多态性存在
于继承性之中,它是继承性的进一步扩展。没有继承就没有多态。通过多态可以实现
代码重用,减少代码量,提高代码的可扩展性和可维护性。在继承的基础上实现方法
重写是实现多态性的关键。
4.2 多态的使用
同一个引用类型,使用不同的实例而执行不同操作。
1、使用父类作为方法形参。
2、使用父类作为方法返回值类型。
4.3 虚方法:使用 virtual 修饰符修饰的方法 。
4.4 重写方法:使用 override 修饰符修饰的方法 。
4.5 方法重写的要求
1、相同的方法名。
2、相同的参数列表。
3、返回值类型必须相同或者是子类。
4 、不能缩小被重写方法的访问权限。
4.6 隐藏方法和重写方法的区别:
(1)关键字分别为 new 和 override。
(2)隐藏保留了基类方法,重写覆盖了基类方法。
(3)基于重写可以实现多态,而隐藏方法不行。
4.7 向上转型语法:
<父类型> <引用变量名> = new <子类型>();
向下转型语法:
<子类型> <引用变量名> = (<子类型> )<父类型的引用变量>;

5. 抽象类和接口
5.1 抽象类和抽象方法的定义
public abstract class 类名
{
public abstract void 方法名([参数列表]);
}
5.2 抽象方法和虚方法的区别
(1)关键字分别为 abstract 和 virtual。
(2)抽象方法必须在抽象类中,虚方法可在普通类中,也可以在抽象类中。
(3)抽象方法只有方法声明,不能有实现;虚方法有实现。
(4)继承抽象类的非抽象类必须重写抽象方法;而虚方法可以不重写。
5.3 定义接口的语法
public interface 接口名称
{
//接口成员(方法、属性等)
}
关于接口的语法,需要大家注意以下几点:
1)接口的名称通常以“I”开头,后面的部分和类的命名规则一样,即 Pascal 命名
法则。
2)接口中的方法不指定具体实现,即也是抽象的,比如这里的 ShowName()方法,
但与抽象类中的抽象方法不同,它不能用 abstract 关键字修饰。
3)接口成员隐式 public,不能显示指定访问级别,比如 ShowName()方法是公有的,
但不能显示指定为 public。
5.4 抽象类接口的好处
1.抽象类便于复用。
2.接口便于代码维护。
5.5 面向对象设计原则
1.多用组合,少用继承。
2.针对接口编程。
3.针对扩展开放,针对改变关闭。


6. 静态和密封
6.1 静态成员
类的静态成员包括静态的方法、字段和属性。
静态成员用“static”关键字声明。
用“类名.成员名”的方式调用。
6.2 静态方法
静态方法只能够访问本类中的静态成员,不能够直接访问本类中的实例成员。
6.3 实例方法
实例方法既可以访问实例成员,又可以访问静态成员。
6.4 静态字段的用法
1.记录已实例化的对象的个数。
2.存储必须在所有实例之间共享的值。
6.5 静态类
1.只包含静态成员。
2.不能实例化对象。
3.不能派生子类。
6.6 密封类
sealed class 不能派生子类,但可以实例化对象。
6.7 密封方法
用 sealed 关键字修饰重写的方法,该方法将不能被子类重写。


7. 值类型和引用类型
7.1 值类型和引用类型
值类型一般保存在栈中,引用类型一般保存在堆中。
值类型直接存储值,引用类型直接存储对象的地址或引用。
7.2 定义结构的语法
访问修饰符 struct 结构名
{

结构成员
}
7.3 定义枚举的语法
访问修饰符 enum 枚举名
{
成员 1,成员 2,……成员 n
}
7.4 ref 和 out 的区别
ref 对应的变量必须有初始值,out 可以没有。


7.5 常量
不可修改,必须有初始值,必须定义在类中,关键字 const。
7.5 装箱和拆箱
装箱:将值类型转成引用类型。
拆箱:将引用类型转成值类型。


7.6 Object 和 ValueType
直接继承 Object 是引用类型,继承 ValueType 是值类型