面向对象编程概述
面向对象编程(OOP),是把现实中的事物进行抽象化,其设计的重点就是对类进行设计。
- 什么是类和对象
类,它实际上是一种复杂的数据类型,在这个复杂的类型当中有数据和与这些数据相关的操作封装在一起。
对象,就是在有了类之后对这些抽象化的类进行具体化,就行成了对象,也就是说对象是指类的实例。比如:学生,它是一个抽象的类,具体到某个人如:张三,他就是一个对象。
如下例,创建一个学生类Student
public class Student
{
public string StudentNo //学号
{
get
{
return "";
}
}
public int StudentAge //年龄
{
get
{
return 0;
}
}
public string StudentGrade //年级
{
get
{
return "";
}
}
}
//把这个类实例化出一个对象
Student zhangsan = new Student();
使用Visual Studio新建C#控制台应用程序
1.在生成的工程中新增一个Student类
class Student
{
private string no;
private int age;
private string grade;
//学号
public string StudentNo
{
get
{
return no;
}
set
{
no = value;
}
}
//年龄
public int StudentAge
{
get
{
return age;
}
set
{
age = value;
}
}
//年级
public string StudentGrade
{
get
{
return grade;
}
set
{
grade = value;
}
}
public void Show()
{
Console.WriteLine("学号:" + no + ";" + "年龄:" + age + "年级:" + grade );
}
}
在上面的类定义中,使用了get{}和set{},这是类的访问器,其中get表示读取,set表示写入。如果某个成员只可读取则不需要set语句。
注意:set语句中有个关键字value,用来表示赋给成员的值。
2.在Main方法中加入如下代码时行测试:
Student stu = new Student();
stu.StudentNo = "00001";
stu.StudentAge = 18;
stu.StudentGrade = "Grade3";
stu.Show();
Console.ReadKey();
编译运行后的结果:
-
如何理解面向对象编程
面向对象编程,简称OOP。通过给程序中加入扩展语句,把函数“封装”进编程所必须的“对象”当中,使得复杂的工作条理更清晰、编写更容易。
面向对象编程达到了软件工程的三个主要目标
1.重用性
2.灵活性
3.扩展性
面向对象编程的基本思想中使用了对象、类、继承、封装、多态等来进行程序开发
面向对象编程的本质是以对象为中心,编写可重复利用、方便扩展的代码
面向对象编程的一个标准过程
-
面向对象的技术
面向对象的关键技术是:对象、类、接口、继承、多态
对象与类的相关知识上面已做介绍,下面介绍接口、继承和多态。 -
接口
接口中只包含了成员的定义,不包含成员的具体实现。
这里指的成员有:方法、属性、索引器、事件……
设计接口的目的是为不相关的类提供通用的属性,打个比方,学生类、教师类,可以为它们设计一个接口人类,这个人类中提供了学生类和教师类的通用属性。
在C#中的接口如:IDbConnection用来定义数据源的连接,它提供了多个未实现的属性和方法。开发者可以自定义两个不同的类sqlconnection、AccessConnection并继承自IDbConnection接口。这个时候这两个类就具备了相同的成员,但各自去实现接口中未实现的属性和方法。
下面代码说明了一个简单的接口定义
interface Iconnection
{
public string DatabaseName; //数据库名称
public void AddDataBase(); //添加数据
public string GetConn(); //获取数据库连接
}
接口就像是一个模板,提供了基本成员的结构,但并没有添加任何实质性的内容。注意:C#不能实现多个类的继承,而可以实现多个接口的继承,所以 使用接口是可以让一个类具备两个以上基类的唯一途径。
作用Visual Studio新增C#控制台应用程序
1.新增一个接口 Person
public interface Person
{
string Name
{
get;
}
void ToDo();
}
2.新增一个类Student继承自这个接口,并在Main方法中实例化Student类并调用接口中定义的方法
class Student : Person
{
public string Name { get; set; }
public void ToDo()
{
Console.WriteLine(Name + "是学生,学习!");
}
static void Main(string[] args)
{
Student stu = new Student();
stu.Name = "谢声";
stu.ToDo();
Console.ReadKey();
}
}
编译运行的结果如下:
- 继承
继承就是从父类中获取一些公开的成员,如方法和属性。
语法如下
//继承类
class Student : Person
//继承接口
class Student : Interface
子类与父类之间使用“:”这个符号进行相隔,C#中只允许继承一个父类,但允许继承多个接口。如果子类继承了接口,那么子类必须要实现接口中定义的所有公开成员。
- 多态
多态是指类可以有多种形态,通过修改可以形成多种不同的实现方法。当子类从父类继承时,它会获得父类中的所有方法、字段、属性和事件,如果在子类中要更改父亲类的数据和行为,通常有两种选择:
1.创建新的成员替换父类成员,创建成员的时候使用new 关键字
2.可以重写虚拟的父类成员
方法一:替换父类成员
class ParentClass
{
public string GetName()
{
return "父类名称";
}
}
class SonClass : ParentClass
{
public new string GetName()
{
return "子类名称";
}
}
方法二:重写虚拟的父级成员,父类在员使用关键字virtual,子类中成员使用关键字override
class ParentClass
{
public virtual string GetName()
{
return "父类名称";
}
}
class SonClass : ParentClass
{
public override string GetName()
{
return "子类名称";
}
}