面向对象
对象是实际存在的,一定是看得见,摸得着的
我们把这些具有相同属性和行为的对象进行进一步的封装,提出了一个概念"类"
类:类就是一个模子,确定了对象将会拥有的属性和方法
类的语法
[ 访问修饰符 ] class 类名
{
类的成员;
//字段,属性,方法;
}
访问修饰符:pulic
类名:Pascal要求每个单词的首字母都要大写
我们写好一个类以后,需要创建这个类对象,我们管创建这个类的对象的过程,称之为类的实例化
使用关键字new
类中成员的作用
1)字段:存储数据
类中的成员如果不加访问修饰符,默认是private
private:私有的,只能在类的内部访问,出了这个类之后,就访问不到了
this
this代表当前类的对象
类是不占内存的,而对象是占内存的
类的主体成员有字段,属性,方法,构造函数和析构函数
对类的成员的解释如下:
字段的用法相当于类中的变量,被视为类的一部分的对象实例,通常保存数据
属性是一种特殊的方法,可以像字段一样被访问,属性可以为类字段提供保护
避免字段在对象不知道的情况下被更改
方法定义可以执行的操作,方法,可以使用变量作为参数,接受提供输入数据的参数,并且可以通过参数返回输出数据,方法还可以不使用参数,而直接返回值
构造函数是在第一次创建对象时调用的方法,他们通常用于初始化对象的数据
析构函数是当对象即将从内存移除时由执行引擎调用的方法,他们通常用来确保需要释放的所有资源都得到了适当的处理
对类的访问步骤如下:
1)执行类的构造函数,初始化类的字段和属性
2)访问类的字段,属性或方法
3)执行类的析构函数,释放资源
定义一个完整的的类,包含字段,属性,方法,构造函数和析构函数
访问修饰符 | 含义 |
public | 公共成员 |
private | 私有成员 |
protected | 受保护成员 |
internal | 内部成员 |
字段默认是私有的,不能被类以外的程序访问,供在类的内部使用
this代表当前类的对象
类是不占内存的,而对象是占内存的
属性的作用就是保护字段,对字段的取值和设值进行限定
三种属性
既有get方法,也有set方法的属性,我们称之为可读可写属性
只有get方法没有set方法,我们称之为只读属性
只有set方法没有get方法,我们称之为只写属性
属性结合了字段和方法的性质,可以看做特殊的方法,属性可以像字段一样表示数据,同时可以对数据进行读写,其具体使用形态如下:
1)对于对象来说,属性可以看作是字段,访问属性与访问字段的语法和访问结果一样
2)对于类来说属性是一个或两个语句块表示一个get访问器或set访问器
属性使类能够以一种公开的方式获取数据,同时隐藏获取数据和验证数据的代码
定义属性时可使用访问修饰符来定义,但是属性与其他成员不同,属性包含两部分的定义:get语句块和set语句块可以具有不同的访问修饰符,除了访问修饰符,属性还可以有以下标识:
1)使用static关键字将属性声明为静态属性
2)使用virtual关键字将属性标记为虚属性
3)使用sealed关键字表示它对派生类不再是虚拟的
4)使用abstract声明属性,在派生类中实现
对象创建好后,依次的给对象的每个属性赋值,这个过程我们称之为对象的初始化
构造函数
主要作用就是对对象进行初始化
构造函数
主要作用就是对对象进行初始化
构造函数其实就是一个函数,只不过一个特殊的函数
语法:
public 构造函数 ()
{
代码;
}
1.没有返回值,连void也不能写
2.构造函数的名称必须跟类名一致
调用构造函数
new的作用
1)在内存中开辟空间
2)在开辟的空间中创建对象
3)调用对象的构造函数
构造函数是类的调用中首先执行的函数,是方法的一种,与其他方法不同的是,函数在创建类的对象时自动执行
构造函数的特点
1)可以重载
2)类中默认会有一个无参数的构造函数,当你写了一个新的构造函数后,那个默认的无参数的构造函数就被覆盖了
值类型 : int double char bool decimal struct enum
引用类型 : string 数组,自定义类
堆 栈 静态存储区域
值类型 : 值类型的值是存在栈中的
引用类型 : 引用类型的值是存在堆中的