第1章 类和对象——定义类和创建对象

Posted qy1234

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第1章 类和对象——定义类和创建对象相关的知识,希望对你有一定的参考价值。

1.1     定义类、创建对象

在编程时,要定义类,然后在创建这个类的对象(实例)。

1.1.1 定义类

定义类的语法个式如下:

访问修饰符 Class 类名

{

    类的成员1;

    ................

    类的成员n;      

}

各项的含义如下。

1)  “访问修饰符”用来限制类的作用范围或访问级别,类的修饰符只有public和internal两种(嵌套类除外)。其中,声明为public的类可以被任何其他类访问;声明为internal的类智只能从同一个程序集的其他类中访问,即只有当前项目中的代码才能访问。若省略访问修饰符,则默认为internal。

2)   “类名”的命名与变量命名规则相同,类名使用Pascal命名规范。类名使用能够反映类功能的名词或名词短语。单独定义的类文件名要能够反映类的内容,最好是与类同名。

1.1.2 类的成员

在类的定义汇中,类的成员包含字段成员、方法成员等。字段成员用于描述状态,方法成员用于描述操作。

1.字段

类的成员变量又称为字段成员,字段成员也称成员变量,格式如下。

访问修饰符数据类型字段名=初值;

1)如果不希望其他类访问该成员,则在定义该类的成员时,“访问修饰符”使用protected或private;如果希望其他类访问该成员,则在定义该类的成员下,用public访问符,例如:

public string  name; //姓名

2)“字段名”使用camel命名规范来命名,使用名词定义字段名称。

3)“初值”表示该字段的初始状态,例如:

public  int age=18;//年龄,整型,初值18岁

2. 方法成员

在类的定义汇总,类的方法成员在C#中称为方法,在其他程序语言中称为函数,格式如下。

访问修饰符 返回值类型  方法名(形参列表)

{

      方法体;

       [return 表达式;]

}

 1)这里介绍的方法成员,其“访问修饰符”不能是私有的private或受保护的protected,要声明为public,才能在,才能在其他类中访问到。

2)“返回值类型”可以是string、int等基本数据类型,也可以是类类型。如果盖方法不返回值,则使用void关键字。

采用以下形式声明一个无参数的、不返回值的方法:

public void  SampleMethod()

{

      方法体;

}

方法执行完毕后可以不返回任何值,也可以返回一个值。如果方法有返回值,那么方法体重必须要有return语句,且return语句必须指定一个与方法声明中的返回类型一致的表达式;如果方法不返回任何值,则返回类型为void。方法体内可以有return语句,也可以没有return语句,return语句的作用是立即退出方法执行。

3)“方法名”使用Pascal命名规范,应使用动词或动词短语。在一个类中,访问修饰符或功能相同的方法应该放在一起。

4)“形参列表”是包括类型名和名称的列表,类型可以是简单数据类型,也可以是类类型。

形参列表可以没有,也可以多个。即使不带参数也要在方法名加一对圆括号。形参列表的形式如下。

类型1形参1,类型2形参2,…

方法成员中的“形参列表”是形参参数表(简称形参parameter),是在定义方法的时候使用的参数,目的用来接收调用该方法时传入的参数。形参的本质是一个名字,不占用内存空间。

5)“方法体”就是方法中的0个或多个语句。

 

 【1-1】 使用面向对象的思想描述并抽象出学生类。

功能描述:常用的学生信息有姓名、性别、年龄、班级等基本信息,学习完一门课程后需要参加考试,只有考试通过后才能进入下一门课的学习。请根据描述,从对象抽象出学生类。要求定义学生类,并在主方法中实例化学生对象。

思路分析如下。

1)分析问题:学生学习课程。

2)提炼对象:学生。

3)分析对象的状态:姓名、性别、年龄、班级等。

4)分析对象的操作:学习、考试等。

5)定义类:学生类Student。

状态:

姓名name

性别gender

年龄age

班级grade

操作:

显示学习的课程Study(course),course是显示的课程名称

显示考试的课程Exam(course,score),course课程,score成

技术图片

课堂练习1-2】请使用面向对象的思想描述并抽象出“台湾烧仙草奶茶连锁店”的类。

功能描述:不同的“台湾烧仙草奶茶连锁店”具有相同的环境、奶茶品种、价格、服务等,显示某编号奶茶店的信息。

技术图片 

【例1-2】  使用面向对象的思想描述长方体类。

功能描述:长方体有3条棱,分别叫作长方体的长,宽,高。用这3条棱既能描述一个长方体,也可以计算长方体的体积、表面积。

思路分析如下。

1)  分析问题:用长方体的3条棱就能描述一个长方体,计算长方体的体积、表面积。

2)  提炼对象:长方体。

3)  分析对象的状态:长,宽,高。

4)  分析对象的操作:计算长方体的体积、表面积。

5)  定义类:长方体类Cuboid。

状态:

长length

宽width

高height

操作:

计算长方体的体积Cubage,长方体的体积=长×宽×高计算长方体的表面积TotalArea,长方体的表面积=(长×宽+长×高+宽×高)×2

技术图片

1.1.2 成员变量

成员变量是在类中定义的变量,字段、属性都能够叫作成员变量。定义在方法中的变量称为局部变量。

1.成员变量与this关键字

如果局部变量的名字与成员变量的名字相同,要想再该方法中使用成员变量,必须使用this关键字。在C#中,this关键字有多种用法,这里介绍在类定义中的用法,this用于区分成员变量和局部(本地)变量(或参数)。This关键字就是表示类中定义的成员名

【例1-3】定义一个名为Person的类,类中包括字段:name(姓名)、gender(性别)、age(性别),包括方法:Study()、Work()。代码如下。

技术图片

上面Study()、Work()方法中的this.name表示成员名,name、age表示形式参数或局部(本地)变量。在方法中,通过this可以语义上区分成员名、参数名(或局部变量)。

注意:在实际编程中是不建议参数名与字段名相同的,这样做降低了代码的易读性,这里只是为了说明this关键字的用法而已。

2. 成员变量与局部变量的区别

1)  成员变量

1. 成员变量定义在类中,在整个类中都可以访问

2. 成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。

3.  成员变量有默认初始化值

2)   局部变量

1. 局部变量只定义在局部氛围内,如方法(函数)内、语句内等,只在所属区域有效。

2. 局部变量存在于栈内存中,作用范围结束后,变量空间会自动释放。

3.  局部变量没有默认初始化值。

4.  在使用变量是需要遵循的原则:就近原则。首先在局部范围找,有就使用,接着在成员位置找。

3)    成员变量与局部变量的区别

1. 在类中的位置不同

成员变量:在类中方法外面

局部变量:在方法或者代码块中,或者方法的声明上(即在参数列表中)

 2. 在内存中的位置不同

成员变量:在堆中(方法区中的静态区)。

局部变量:在栈中。

 3. 生命周期不同

成员变量:随着对象的创建而存在,随着对象的消失而消失

局部变量:随着方法的调用或者代码块的执行而存在,随着方法的调用完毕或者代码块的执行完毕而消失。

 4. 初始值不同

成员变量:有默认初始值

局部变量:没有默认初始值,使用之前需要赋值,否则编译器会报错(The localvariable xxx may not have been initialized)。

1.3 创建对象

类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员方法。

1.3.1 对象的声明与实例化

对于已经定义的类,就可以用它作为数据类型来创建类的对象,简称对象。创建类的对象分为以下两个步骤。

1.声明对象引用变量

类名 对象名;

1)  “类名”是已经定义的类名称。

2)  “对象名”使用camel命名规范来命名,使用名词命名对象名称

例如,声明一个Student类型的对象stu,代码如下。

Student stu ; //声明Student类的类型对象stu,但未实例化

上面代码,只声明了Student类型的变量,并没有对类中的成员赋值,即未实例化,类成员没有实例化将不能访问

2.创建类的实例

创建类的实例也称实例化一个类的对象,简称创建对象。可以对已声明的对象进行实例化(也称初始化),实例化对象需要使用运算符new。其语法格式如下。

 

对象名=new 类名(参数列表);

参数列表”是可选的,根据类的构造函数来确定。“参数列表”将在构造函数中介绍。

例如,下面代码创建Student类的实例,并赋给stu对象,对stu对象进行初始化,

Stu=new student();//创建Student类的实例,并把引用地址赋给stu

通常是把上面声明对象与实例化对象的两个语句合在一起,其语法格式如下。

 

类名 对象名=new 类名(参数列表);

例如,把上面两汉代码写在一起,代码如下。

Student stu=new Student(); //声明Student类型的对象,并初始化stu对象

使用类声明的对象,实质上是一个引用类型变量,使用运算符new 和构造函数来实例化对象并获取内存空间。

 

注意:有关类的实例(对象)的声明与创建不能放在该类的内部,只能在外部(即其他类中),通常写在class Program类的Main()方法中。

1.1.3  对象成员的访问

类或对象成员的访问,可分为在本类内使用该成员、实例成员的访问和实例方法的访问3种方式。

 1.  在本类内使用成员

如果在本类内使用成员,类名可以省略,用this表示本类内的成员。格式如下。

this.成员

this.成员

2.  实例成员的访问

如果在其他类中访问实例成员,格式如下。

对象名.成员名

说明:“.”是一个运算符,其功能是访问指定类型或命名空间的成员。

例如,下面代码为对象的成员赋值:

stu.gender=”女”; //为stu对象的gender成员赋值

3.  实例方法的访问

实例方法的使用格式如下。

对象名.方法名(实参列表);

在调用方法时,实际参数(简称实参argument)将赋值给形参。因而,必须注意实参的个数、类型,应与形参一一对象,并且必须要有确定的值。实参的本质是一个变量,并且占用内存空间。只有在程序执行过程中调用了方法,形参才有可能得到具体的值,并参与运算求得方法值。实参列表的形式如下。

 

实参1,实参2,…

 

使用带有返回值的方法使用时,调用实例方法的格式一般采用:

 

变量名=对象名.方法名(实参1,实参2,…….);

 

如果不需要使用方法的返回值,则采用如下调用格式:

 

对象名.方法名(实参1,实参2,……);

例如,下面代码:

stu.Study(“英语”); //访问stu对象的study()方法,实参是“英语”

【例1-4】在【例1-1】定义类的基础上,在Program类的Main()方法中编写如下代码。

技术图片

【课堂练习1-5】请在【课堂练习1-2】定义类的基础上编写代码,在主程序中编写创建对象,给字段赋值,调用方法的代码。

技术图片

【例1-6】在【例1-2】定义类的基础上,在Program类的Main()方法中编写如下代码。

技术图片

 

以上是关于第1章 类和对象——定义类和创建对象的主要内容,如果未能解决你的问题,请参考以下文章

第7章 类和对象

第8章 面向对象编程

第7章 类和对象

3.1类和对象

Python面向对象编程第02篇 类和对象

Python面向对象编程第02篇 类和对象