面向對象編程概述
面向對象編程(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 "子類名稱";
}
}