8.1 结构
1. 结构概述
在 C# 中,结构体是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据。struct 关键字用于创建结构体
2. 结构的使用
3. 一般来说结构体的定义要放在class的外面或class的里面,尽量不放在Main的里面。
struct 自定义类型名
{
public 变量类型 变量名;
......;
......;
......;
}
struct Global
{
//姓名
public static string name;
//性别
public static string sex;
//地址
public static string address;
}
8.2 面向对象概述
1. 对象
实例化的具体事物
类或结构定义的作用类似于蓝图,指定该类型可以进行哪些操作。 从本质上说,对象是按照此蓝图分配和配置的内存块。 程序可以创建同一个类的多个对象。 对象也称为实例,可以存储在命名变量中,也可以存储在数组或集合中。 使用这些变量来调用对象方法及访问对象公共属性的代码称为客户端代码。 在 C# 等面向对象的语言中,典型的程序由动态交互的多个对象组成。
2. 类
类包含成员,成员可以是静态成员或实例成员。静态成员属于类,实例成员属于对象。静态字段的值对每
个对象都是相同的。而每个对象的实例字段都可以有不同的值。静态成员关联了static修饰符。成员的种类如下
3. 封装
C#是面向对象的一门语言,面向对象的语言有三大特性:封装、继承、多态。而封装可以实现一个自定义的类,从而定义新的对象
封装是将一个或多个项目集合在一个单元中,这个单元称之为类。这样可以防止对实现细节的访问
C#封装可以根据需要通过修饰符实现类成员的范围和可见性。访问修饰符有:
public:公共的,任何地方都可以访问,但是需要引用命名空间
private:私有的,类的内部才可以访问
internal:内部的,默认的,程序集中可以访问,程序集就是命名空间
protected:被保护的,类的内部和类的父类和子类中可以访问
Protected internal :protected和internal的并集,符合任意一条都可以访问
4. 继承
继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。
当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类,这个新的类被称为派生类。
8.3 类
1. 类的概述
类是一种活动的数据结构
程序的数据和功能被组织为逻辑上相关的数据项和函数封装的集合,并称为类
类包含数据成员和函数成员:
数据成员:存储与类或类的实例相关的数据(类体内的变量,字段)
函数成员:执行代码,通常会模拟类所表示的现实世界事物的功能和操作(类体内的函数,方法)
一个 C# 类可以有任意的数目的数据成员和成员函数。成员可以是 9 种成员类型的任意组合
2. 类的声明
类的声明定义新类的特征和成员。它并不创建类的实例,但创建用于创建实例的模板。类的声明提供下列内容:
• 类的名称
• 类的成员
• 类的特征
关键字 类名
class MyExcellentClass
{成员声明
}
类成员
字段和方法是最重要的的类成员类型。字段是数据成员,方法是函数成员。
字段
字段是隶属于类的变量。
可以是任何类型,无论是预定义类型还是用户定义类型
和所有变量一样,字段是用来保存数据的(可以被写入和读取)
class MyClass
{类型 字段名 例如:int MyField;
}
3. 构造函数和析构函数
构造函数(构造方法):
构造函数又叫构造方法,它是一种特殊的成员函数,它主要用于为对象分配存储空间,对数据成员进行初始化,也就是就是对类进行初始化。
主要特点:
1、构造函数的名字必须与类同名
2、构造函数没有返回类型,它可以带参数,也可以不带参数
3、声明类对象时,系统自动调用构造函数,构造函数不能被显式调用
4、构造函数可以重载,从而提供初始化类对象的不同方法
5、若在声明时未定义构造函数,系统会自动生成默认的构造函数,此时构造函数的函数体为空
声明构造函数的要求:
1、构造函数不允许有返回类型,包括void类型;
2、构造函数的名称必须与类名相同(所以构造函数往往需要使用形参)
构造方法的定义语法形式如下:
1. 构造方法必须类重名。
2. 构造方法没有返回值,但可以有参数。
3. 构造方法可以有多个重载。
访问修饰符 类名 (参数列表)
{
语句块;
}
析构函数(析构方法):
析构函数是实现销毁一个类的实例的方法成员。析构函数不能有参数,不能任何修饰符而且不能被调用。由于析构函数的目的与构造函数的相反,就加前缀‘~’以示区别。
虽然C#(更确切的说是CLR)提供了一种新的内存管理机制——自动内存管理机制,资源的释放是可以通过“垃圾回收器” 自动完成的,一般不需要用户干预,但在有些特殊情况下还是需要用到析构函数的,如在C#中非托管资源的释放。
析构方法的定义语法形式如下:
1. 不能在结构中定义析构方法,只能对类使用析构方法。
2. 一个类只能有一个析构方法。
3. 无法继承或重载析构方法。
4. 无法调用析构方法。
5. 它们是被自动调用的。
6. 析构方法既没有修饰符,也没有参数。
~类名()
{
语句块;
在析构方法中不带任何参数,它实际上是保证在程序中会调用垃圾回收方法 Finalize()。
4. 对象的创建及使用
实例化类得到对象
对象调用被实例化类的方法
5. 类与对象的关系
类就是对象的抽象化概念,一个类就是一个对象集合的总称,通俗的来讲就是对象需要什么这个类就提供什么给对象,加入对象需要什么数据这个类就提供什么数据,对象需要什么功能这个类就提供什么功能。