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()方法中编写如下代码。
原文地址:https://www.cnblogs.com/qy1234/p/12364401.html