3.一步一步學c#(三):對象和類型

來源:互聯網
上載者:User

標籤:blog   http   io   os   使用   ar   strong   資料   2014   

類和結構

類和結構實際上都是建立對象的模板,每個對象都包含資料,並提供了處理和訪問資料的方法,。

結構與類的區別是它們在記憶體中的儲存方式,訪問方式(類是儲存在堆(heap)上的參考型別),而結構是儲存在棧(stack)上的實值型別)和他們的一些特徵(如結構不支援繼承)。結構與類非常相似,主要的區別是使用關鍵字struct代替class來聲明結構。

對於類和結構,都使用關鍵字new來聲明執行個體:這個關鍵字建立對象並對其進行初始化。

類和結構的欄位值都預設0:

類中的資料和函數稱為類的成員。

資料成員:資料成員是包含類的資料——欄位,常量和事件的成員。資料成員可以是待用資料。

欄位是與類相關的變數。

常量與類的關聯方式同變數與類的關聯方式。const關鍵字聲明常量,假如把它聲明為public,就可以在類的外部存取他:

函數成員

函數成員提供了操作類中資料的某些功能,包括方法,屬性,建構函式和終結器(finalizer),運算以及索引器。

方法

正式的c#術語分函數和方法。

方法的聲明

表示矩形的.NET基類System.Drawing.Rectangle.

如果方法有傳回值時,return語句就必須與傳回值一起使用。如果方法沒有傳回值時,就把傳回型別指定為void,因為不能省略傳回型別。

方法可以包含任意多條return語句

調用方法。

MathTest說明了類的定義和執行個體化,方法的定義和調用的文法,除了包含main()方法的類之外,還定義了Math Test.

從代碼中看出,MathTest類包含一個欄位和一個方法,該欄位包含一個數字,該方法計算該數位平方,類還包括兩個靜態方法,一個返回pi的值,另一個計算作為參數傳入的數位平方。

下面的例子parameterTest.cs說明了如果把數組或其他參考型別(如類)傳遞給方法,對應的方法就會使用該引用改變這個數組中的值,而新值會反射在原始數組對象上:

注意,i的值保持不變,而在ints中改變的值在原始數組中也改變了。

out參數

編譯器使用out關鍵字來初始化,在方法的輸入參數前面加上out首碼時,傳遞給該方法的變數可以不初始化,該變數通過引用傳遞,所以在被用的方法中返回時,對該方法對該變數進行的任何改變都會保留下來,在調用該方法是,還需要out關鍵字,與在定義該方法時一樣:

具名引數,具名引數允許按任意順序傳遞,方法如下:

假如方法有幾個參數,就可以在同一個調用中混合使用位置和具名引數。

選擇性參數,參數也可以是可選的,選擇性參數還必須是方法定義的最後一個參數:

要想此方法正常工作,必須在最後定義optionalNumber參數。

方法的重載。為了方法的重載,值需聲明同名單參數個數或參數類型不同的方法即可:

假如不能使用選擇性參數,就可以使用方法重載來達到此目的:

兩種方法不能僅在傳回型別上有區別。兩個方法不能僅根據參數是聲明為ref還是out來區分。

屬性

它是一個方法或一對方法,在客戶代碼看來,它(們)是一個欄位。

c#中定義屬性,可以使用下面的文法:

 

建構函式

聲明基本建構函式的文法就是聲明一個與類同名的方法,但該方法沒有傳回型別;

建構函式的重載迴圈與其他方法相同的規則。

帶參數的建構函式,編譯器不會自動提供預設的建構函式。

     }

}

把建構函式定義為private或protectcd這樣不相關的類不能訪問他們:

在mynumber中編寫一個共有靜態屬性或方法已執行個體化該類。兩種有用的情況:類僅用作某些靜態成員或屬性的容器,因此永遠不會執行個體化它。希望類僅通過調用某個靜態成員函數來執行個體化。

靜態建構函式

編寫靜態建構函式的原因,類有一些靜態欄位或屬性,需要在第一次使用類之前,從外部源中初始化這些靜態欄位或屬性。注意,靜態建構函式沒有方法修飾符,靜態建構函式不帶任何參數,一個類也只能有一個靜態建構函式。

上面的例子說明靜態建構函式的用法。為了使用colour結構,需要引用system.drawing.dll程式集,且必須為system.drawing名稱空間加上一條using語句;
using system;

using system .Drawing;

用下面的代碼測試靜態建構函式:

運行代碼,得到以下結果:

匿名型別

var關鍵字,它用於表示隱式類型化的變數。var與new一起使用時,可以建立匿名型別,匿名型別只是一個繼承自object且沒有名稱的類。

假如需要一個對象包含某個人的姓氏,中間名和名字,則聲明如下:

結構

為結構定義函數與為類定義函數完全相同,以下代碼說明了結構的建構函式和屬性:

         }

}

結構是實值型別,不是參考型別,。結構不支援繼承,對於結構建構函式的工作方式有一些區別,尤其是編譯器總是提供一個無參數的預設建構函式,它不允許許替換的。

結構的建構函式

預設建構函式把數值欄位都初始化為0,把參考型別欄位初始化為null,總是隱式的給出。提供欄位的初始化值也不能繞過預設建構函式,下面代碼產生編譯錯誤:

部分類

partial關鍵字的用法:把partial放在class,struct或interface關鍵字的前面,下例:

在嵌套的類型中,只要partial關鍵字位於class關鍵字的前面,就可以嵌套部分類。

把部分類編譯到類型中時,屬性,XML注釋,介面,泛型型別的參數屬性和成員會合并。

靜態類

如果類只包含靜態方法和屬性,該類就是靜態。

tostring()方法,他是快速擷取對象的字串表示的最便捷方式。

例子;

      }

}

該例子說明了如果不在自己定義的類中重寫Tostring(),該類將繼承system.object的實現方式,它顯示的名稱,如果希望tostring()返回一個字串,其包含類中的對象的值資訊。該例還說明了如何使用屬性封裝欄位。

 

3.一步一步學c#(三):對象和類型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.