程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#編程利器之一:類(Class)

C#編程利器之一:類(Class)

編輯:關於C#

面向對象的程序設計(Object-Oriented Programming,簡記為OOP)是一種功能非常強大的編程方法, 立意於創建軟件重用代碼,以類為基礎去思考編程問題。類是OOP中的核心組成元素,通常都是使用類來 “封裝”對象(屬性、行為)。在經典圖書《代碼大全》裡定義:“創建高質量的類,第一步,可能也是 最重要的一步,就是創建一個好的接口。這也包括了創建一個可以通過接口來展現的合理的抽象,並確保 細節仍被隱藏在抽象背後。”,其實接口也是一個類,一個更為抽象的類.

在我以前的一篇文章裡曾經提到:“面向對象編程,並不是類越多越好,類的劃分是為了封裝,但分類 的基礎是抽象,具有相同屬性和功能的對象的抽象集合才是類。----選自《大話設計模式》” 。

可見,在OOP中,類是何等的重要,本文將以類作為談論點,全方面的分析和介紹類的各種相關知識點 。

一. 日常生活中的對象

在大多數人眼裡,對象是一個抽象的名詞,而類呢則更為抽象。日常生活中,可以把對象理解為可辯 識的一種實體。如汽車、輪船、飛機、電腦等。如果把對象和程序聯系起來,則可看作是在程序中表示的 一個實體。

一切從現實出發,才能使編寫出的代碼更能反映出真實的生活。如電腦這個對象,則包括有主板,硬 盤,顯卡,內存等組成元素。然而實際的編程中並不是這麼的簡單,但是我們還是得從現實中去分析。以 這種方式去考慮程序的設計,就會得到很多的好處:程序更容易設計,程序的體系結構更直觀,更容易理 解,更清晰的反映了程序從真實生活中抽象出來的含義,更便於多個開發人員一起工作,因為他們可以在 代碼中處理不同的對象,只需要知道其他人的對象做什麼工作,無需擔心其他人的代碼的工作細節。

二. 編程中的對象

我們平時在編程中用到過些什麼對象呢?我想無外乎是兩大類:系統對象和用戶自定義對象。OK, 為 了更清楚的說明這點,我們從“Hello World”開始吧。看看如下代碼定義:

Console.WriteLine("Hello Wrold");

上面這句代碼對於正在看本文的你來說,我想應該是在熟悉不過了.他的功能就是將“Hello World”這 個字符串在控制台輸出.然而,出此之外,這句代碼還隱含著其他的相關知識.那麼具體是什麼呢?其實我們 在編寫這句代碼的時候已經使用對象了.Console就是一個對象,.NET Framework提供的一個系統對象,我們 之所以能夠通過WriteLine方法實現輸出,是因為我們調用了這個系統對象的方法. 這裡Console就是一個 典型的系統對象.

下面我們來看看什麼的自定義對象,首先我們來分析一下現實生活中的對象.以電腦來說,一台電腦大概 由主板,硬盤,顯卡,內存等眾多元素組成.通過抽象,我們就可以認為電腦就是一個對象,主板,顯卡這些組 成元素則是電腦這個對象的屬性.下面是電腦類的定義:

1/**//// <summary>
2/// 電腦類
3/// </summary>
4public class Computer
5{
6  private string name;
7  public string Name
8  {
9    get { return name; }
10    set { name = value; }
11  }
12
13  public string 主板 = "精英主板";
14  public string 硬盤 = "希捷硬盤";
15  public string 內存 = "金士頓";
16  public string 顯卡 = "七彩紅";
17  //其他組成元素
18
19  public Computer()
20  { }
21
22  public Computer(string name)
23  {
24    this.Name = name;
25  }
26}

上面這段代碼說明什麼呢?我們定義了一個Computer類,類裡定義了幾個成員,還有構造方法等.為了更 清晰的說明這樣做的目的,我們可以先來做個測試.建立兩個對象,然後判斷他門的屬性是不是同一個.代碼 如下:

1class Program
2{
3  static void Main(string[] args)
4  {
5    Computer zhangsan = new Computer("張三");
6    Computer lisi = new Computer("李四");
7
8    Console.WriteLine(zhangsan.主板 == lisi.主板);
9  }
10}

通過運行上面程序段,結果為:true.這說明什麼,說明張三的主板和李四的主板是同一個嗎?不是,我們 應該說張三和李四都是使用的同一個類的對象.這裡Computer類到底做了什麼呢?封裝屬性和行為嗎?最容 易的理解便是把這個類看作是一種新的數據類型.也就是說Computer是一種數據類型,而zhangsan和lisi則 是這種新數據類型的變量,用OOP的話來說的話,zhangsan和lisi則是Computer這個對象的實例或是對象.

三、類的相關特性

類的特性有很多,這裡我就簡單的介紹下最常用的幾個特性。

1. 類名

類名是唯一一個用於區分其他類的特性,如同人的名字一樣。當然在同一個項目或是程序集或是框架 中,會出現同名的類,就如同世界之大,名字相同的人到處都有一樣。而現實生活中的同名人可以根據他 所在的國家、省份、區縣、鄉村以及家庭來區分,對於同名的類呢則是通過命名空間來區分的。

如上電腦類Computer,Computer就是電腦類的類名,用這個名字類區分其他類。

2. 屬性

屬性是一個類的重要組成部分,就以上面的電腦類(Computer)來說吧。name,主板,顯卡等都是 Computer類的屬性。我們可以通過類對象(實例對象)去訪問他們,示意性代碼如下:

1class Computer
2{
3  public string Name = "張三";
4}
5class TestComputer
6{
7  void Method()
8  {
9    Computer computer = new Computer();
10    Console.WriteLine(computer.Name);
11  }
12}

在實際的開發中,我們通常將屬性設置為private的,通過對外提供get;set;屬性訪問器供外部調用, 關於這點這裡就不作詳細介紹。

3. 構造方法

構造方法是用得最多的一個特性,與普通的方法相比不同的是構造方法無返回值修飾符,每當你要創 建一個對象實際上就是在調用給對象的構造方法。實際開發中,我們可以多次重載構造方法,以及通過構 造方法來初始化屬性的值。示意性代碼如下:

1class Computer
2{
3  public Computer() { } //無參構造方法
4  public Computer(string name) //重載構造方法,帶一個參數
5  {
6    this.Name = name;
7  }
8
9  private string name;
10  public string Name
11  {
12    get { return name; }
13    set { name = value; }
14  }
15}
16class TestComputer
17{
18  void Method()
19  {
20    Computer computer = new Computer(); //調用無參構造方法
21    computer.Name = "張三"; // 通過屬性訪問器設置屬性的值
22    Console.WriteLine(computer.Name); //調用重載的帶參數構造方法
23    computer = new Computer("張三"); //通過構造方法設置屬性的值
24    Console.WriteLine(computer.Name);
25  }
26}

4. 行為(方法)

這點很容易理解,類的行為也就是類的方法,如上面類構造方法裡的程序代碼,在TestComputer類裡 就有一個方法Method,我們可以稱為是TestComputer類的行為或是方法。

5. 類對象(實例)

這裡也很容易理解,在之前我們已經使用了多次類的對象了。如TestComputer類的Method方法裡,就 創建了Computer類型的類對象computer,通過此對象,我們可以很方便的訪問Computer類裡公開的屬性和 方法,示意代碼如下:

1public void Method()
2{
3  //創建一Computer類型的對象computer
4  Computer computer = new Computer("張三");
5  string name = computer.Name; //通過對象computer去調用Computer類的屬性Name
6}

6. 類繼承

由於C#是單繼承語言,因此在類的繼承上只支持單一繼承,也就是說一個類只能有一個父類,但是可 以繼承多個接口。

1class A
2{
3  public string Name { get; set; };
4}
5class B:A //類B繼承於類A
6{
7
8}

1class A
2{
3  public string Name { get; set; };
4}
5interface Ia
6{
7  void MethodA();
8}
9class B:A,Ia //類B繼承於類A,同時繼承於Ia接口
10{
11  public void MethodA()
12  {
13     //
14  }
15}

1class A
2{
3  public string Name { get; set; };
4}
5interface Ia
6{
7  void MethodA();
8}
9interface Ib
10{
11  void MethodB();
12}
13class B:A,Ia,Ib //類B繼承於類A,同時繼承了Ia,Ib接口
14{
15  public void MethodA()
16  {
17     //
18  }
19
20  public void MethodB()
21  {
22     //..
23  }
24}

7. 類修飾

關於類修飾這裡就不做詳細介紹,只是簡單的提出幾個概念。詳細請查閱相關資料了解更多。下面是 幾種常見的類修飾:

1public class ClassName { }
2public static class ClassName { }
3public sealed class ClassName { }
4public partial class ClassName { }

本文介紹了與類相關的常用知識點,當然類還有很多的知識點本文裡沒有提出,要更詳細的了解類請 查閱相關書籍和資料,篇幅限制,本文就介紹於此,希望本文對新手有所幫助。個人能力有限,文中難免 會出錯,還望大家勇言提出,謝謝。

出處:http://beniao.cnblogs.com/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved