第三章 面向对象编程基础(C#)

在前面的章节里我们学习了.NET和C#的基础和C#编程基础,相信大家基本上已经熟练掌握了,而本章我们将学习新的内容——面向对象编程基础。

(一)什么是面向对象

   面向对象其实就是一种程序设计思想,面向对象也叫OOP,是一种基于面向过程的程序开发思想。面向对象的好处在与:1.可以多人合作且方便;2.减少代码的冗余,灵活性高;3.代码的可用性发挥到极致;4.可扩展性强。

(二)面向对象和面向程序的区别

面向过程:编程思路集中的是过程上。

面向对象:编程思路集中在参与的对象上。

例如我们去吃饭:

面向过程:点菜——炒菜——上菜——吃饭——结账

面向对象:客人,服务员,厨师

(三)对象、类、实例化

在面向对象编程里面,最常见的概念就是对象、类和实例化,下面我将分别进行介绍。

对象是具体存在的事物,比如人类,书桌,动物,车等等,而对象又由两部分组成。通常都会把对象划分为两个部分,即静态部分和动态部分。静态部分顾名思义就是不能动的那部分,这个部分也被称为“属性”,任何的对象都具备自身属性,比如人的高矮胖瘦,性别年龄等。而具有这些属性的人会执行哪些动作也是我们应该探讨的部分,这个人会哭泣、说话和微笑等是这个人所具备的行为(动态部分)。

例 

步骤。

(1)可以抽象出一个对象,这里抽象的对象是小狗。

(2)识别这个对象的属性。对象具备的属性都是静态属性如小狗有一双脚,一个脑袋等。

(3)识别这个对象的动态行为,即这只小狗可以进行的动作,如叫,吃东西等(4)识别出这些对象的属性和行为后,这个对象就被定义完成。

究其本质,所有的小狗都是具有以上的属性和行为的,可以将这些属性和行为封装起来以描述小狗这类动物。因此,类实际上就是封装对象属性和行为的载体,对象则是类抽象出的一个实例,而根据类创建对象的过程就是一个实例化的过程。

简单来说就是:(1)对象是具体存在的事物,对象由属性(变量)和方法(函数)组成;(2)类是具有相同属性和行为的一组对象的集合;(3)在开发的时候我们应该先写类,然后通过类来创建对象,在通过对象和调用方法和属性;(4)一个类可以创建多个对象。

(四)面向对象程序设计语言的三大原则

面向对象程序设计具有封装、继承和多态三大基本原则,分别如下:

1、封装

封装是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体就是类,类通常对客户隐藏其实现细节。

2、继承

当处理一个问题时,可以将一些有用的类保留下来,在遇到同样问题时拿来复用,这就是继承的基本思想。继承性主要是利用特定对象之间的共用属性。子类继承父类,子类可以直接访问父类。

3、多态

多态的发生必须有继承关系,多态是指父类对象拥有子类的形态,并且可以表现出子类的特性。

(五)类的相关知识

1、类的声明

类是使用class关键字来声明,语法如下:

类修饰符 class 类名

{

}

以汽车为例声明一个类,代码如下:

public  class  Car

{

   public int number;//编号

   public int color;//颜色

   public string brand;//厂家

}

常用的几个类修饰符

New:仅允许在嵌套类声明时使用,表明类中隐藏了由基类中继承而来的、与基类中同名的成员。

Public:不限制对该类的访问。

Protected:只能从其所在类和所在类的子类(派生类)进行访问。

Internal:只有其所在类才能访问。

Private:只能访问此类。

Abstract:抽象类,不允许建立类的实例且必须有重写。

Sealed:密封类,不允许被继承且不能重写。

2、类的成员

类的定义包括类头和类体,其中,类头就是使用class定义的类名,而类体是用一对大括号{}括起来的,在类体中主要定义类的成员。类的成员包括字段、属性、方法、构造函数、事件、索引等。(1)其中字段就是程序开发中常见的常量或者变量,它是类的一个构成部分,它使得类和结构可以封装成字段。(2)枚举:是值类型数据,主要用于声明一组具有相同性质的常量。(3)属性:是对现实实体特征的抽象,提供对类或对象的访问;属性根据get和set访问器可以分为可读可写属性(包含get和set访问器)、只读属性(只包含get访问器)和只写属性(只包含set访问器)

private int age;   //定义字段

public int Age  //定义属性

{

  get  //设置get访问器

  {

     return age;  //返回age

     Console.WriteLine(age);//输出

 }

set  //设置set访问器

{

   if(vaule > 0 && value < 130)  //满足要求就将值赋给字段

   {

     age=value;

  }

else

{

  Console.WriteLine("输入数据不合理!"); 

}

}

}

3、构造函数和析构函数

(1)构造函数

 构造函数是在创建给定类型的对象时执行的类方法,构造函数具有与类相同的名称,它通常初始化新对象的数据成员。不带参数的构造函数称为“默认构造函数”。无论何时,只要使用new运算符创建对象,并且不为new提供任何参数,就会调用默认构造函数;另外,用户也可以自己自定义构造函数,并在构造函数中设置参数。

class Program

{

  public int x = 3;   //定义变量

  public int y = 5;

  public int z = 0;

 public Program()

{

  z =  x + y;

}

static void Main(string[] args)

{

   Console. WriteLine(“{0}+{1}={2}”,23,34,Program.z);

   Console.ReadLine();

}

}

(2)析构函数

以类名加~来命名的。

(六)对象的创建和使用

1、对象的创建

在C#中使用new操作符调用构造函数来创建对象

例 Test test=new Test(“a”)

参数说明

参数

说明

Test

类名

test

创建Test类对象

new

创建对象操作符

a

构造函数的参数

2、访问对象的属性和行为

当用户使用new操作符创建一个对象后,可以使用“对象.类成员”来获取对象的属性和行为。

3、对象的引用

对象的引用有两种:(1)类名 对象引用名称;(2)引用与对象关联:类名 对象名=new 类名();

4、对象的销毁

C#会自动销毁

(七)this关键字

先看下列代码,我将从这段代码中来讲解this的作用。

private void setName(String name) //定义一个setName方法

{

This.name=name;  //将参数值赋予类中的成员变量

}

在C#中可以使用this关键字来代表本类对象的引用,this关键字被隐式地用于引用对象的成员变量和方法。如上述代码中,this.name指某个类中的成员变量,而this.name=name语句中的第二个name则指的是形参name。实际上setName方法实现的功能就是将形参name的值赋予成员变量name。

This可以调用成员变量和成员方法,但C#中最常用的调用方法是使用“对象.成员变量”或者“对象.成员方法”进行调用。

(八)方法

1、方法的声明

语法格式:

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

{

  //方法的具体实现;

}

修饰符可以是private(默认)、public、protected和internal这4个中的任意一个。返回值类型指定了方法返回数据的类型,可以是数据类型,如果不需要返回一个值,则使用void关键字。参数列表是用逗号分隔的类型、标识符,如果方法中没有参数,则为空。

2、方法的参数

调用方法时可以给该方法传递一个或多个值,传递给方法的值叫作实参,在方法内部,接收实参的变量叫作形参,形参紧跟着方法名的括号中声明,形参的声明语法与变量的声明语法语言。形参只能在括号内部有效。参数可以为值参数、ref参数、out参数和params参数。

(1)值参数

值参数就是在声明时不加修饰的参数,它表明实参与形参之间按值传递,且形参的改变不会影响实参。

(2)ref参数

该参数使形参按引用传递,在方法中对形参所做的任何更改都将反映在实参上,即形参的改变会影响实参。

(3)out参数

out参数用来定义输出函数,它会导致参数通过引用来传递,这与ref参数类似,不同之处在于:ref要求变量必须在传递之前进行赋值,而out定义的参数,无须进行赋值即可使用。

(4)params参数

声明方法时,如果有多个相同数据类型,可以定义为params参数。Params参数是一个一维数组,主要用来指定在参数数目可变时所采用的方法参数。

(九)静态方法和实例方法

静态(static)方法:不对特定实例进行操作,在静态方法中使用this会导致编译错误,调用静态方法时,使用类名直接调用。

class Program

{

  public static int Add(int x, int y )   //定义静态方法实现整形数相加

{

return x+y;

}

static void Main(string[] args)

{

   Console. WriteLine(“{0}+{1}={2}”,23,34,Program.Add(23,24));

   Console.ReadLine();

}

}

运行结果为:

23+34=57

实例方法:是对类的某个给定的实例进行操作,使用实例方法时,需要使用类的对象调用,而且可以用this来访问该方法。

class Program

{

  public int Add(int x, int y )   //定义实例方法实现整形数相加

{

return x+y;

}

static void Main(string[] args)

{

   Console. WriteLine(“{0}+{1}={2}”,23,34,Program.Add(23,24));

   Console.ReadLine();

}

}

运行结果为:

23+34=57

(十)方法的重载

方法的重载是指方法名相同,但参数的数据类型、个数或顺序不同的方法。主要类中由两个及以上的同名方法,使用的参数类型、个数或顺序不同,调用时,编译器就可判断在哪种情况下调用哪种方法。

总结:

1、 类的概念是什么?类是具有相同特征和行为的一类事物的统称。

2、 对象的概念是什么?对象是现实生活中具有唯一标识的实体。

3、 类与对象的关系是什么?对象是类的实例,类是对象的抽象。

4、 类的关键字是 class,假设目前有一个Student类,请问如何创建这个类的对象?Student stu=new Student()。

5、 通过什么方式调用类中的成员?对象名.成员名 对象名.方法名()。

6、 OOP指的是什么,有什么优点?其三大特征是?面向对象编程,优点:易维护、易扩展、代码重用、灵活性好;特征:封装、继承、多态。

7、 类中的特征使用 字段 来描述,类的行为使用方法来描述。

8、 属性的优点是什么?保证字段读写操作的安全性和灵活性。

9、 属性中有哪几个访问器,请分别说明其作用 get{//只读} set{//只写}。

10、 方法重载的特征是什么?在同一个类中,方法名相同,参数个数或参数类型不同。

11、 构造函数的特征是什么?方法名与类名相同,无返回值类型。

12、 构造函数的作用是什么?在使用new关键字创建对象时给对象的成员赋初始值。

13、 构造函数的什么时候被调用?使用new关键字创建对象时。

14、 集合的主要特性有哪些?动态改变大小、可存储任意类型的对象、提供一系列操作集合中对象的方法。

15、举常用的5个常用的值类型和3个常用的引用类型?值类型:int、double、float、bool、enum、datetime;引用类型:string、类、数组、接口

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值