国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-14 16:26:51
字體:
來源:轉載
供稿:網友

類和結構

類和結構實際上都是創建對象的模板,每個對象都包含數據,并提供了處理和訪問數據的方法,。

結構與類的區別是它們在內存中的存儲方式,訪問方式(類是存儲在堆(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()返回一個字符串,其包含類中的對象的值信息。該例還說明了如何使用屬性封裝字段。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 万州区| 南汇区| 浮梁县| 甘肃省| 嘉定区| 九龙坡区| 沙河市| 新民市| 长子县| 玉屏| 揭阳市| 怀宁县| 雅安市| 交城县| 沧源| 法库县| 阿拉善盟| 潮安县| 砀山县| 新密市| 禹州市| 南昌市| 尉犁县| 台中市| 寻甸| 吉首市| 无棣县| 黄山市| 威宁| 徐州市| 堆龙德庆县| 巩义市| 汉中市| 盱眙县| 屏山县| 达日县| 海晏县| 蒲江县| 息烽县| 太和县| 阿城市|