類、對象和命名空間_第1頁
類、對象和命名空間_第2頁
類、對象和命名空間_第3頁
類、對象和命名空間_第4頁
類、對象和命名空間_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 類、對象和命名空間類的概念 關鍵字:class 類是成員變量和成員方法的集合 在 C語言中,單一的數(shù)據(jù)類型難以描述復雜的事物,于是引入了結構體;在大型的程序設計中純粹的過程難以管理復雜而龐大的操作,于是引入了類。類是程序代碼分類管理的必然結果類的示例class Student public int id; public string name = Jackson; public int age = 20; public void SelfIntr() Console.WriteLine(學號是: + id); Console.WriteLine(姓名是: + name); Console.W

2、riteLine(年齡是: + age); 自定義類名自定義類名類中的成員變量,有時也被稱類中的成員變量,有時也被稱為字段,可進行初始化賦值,為字段,可進行初始化賦值,若未賦值,則有默認值若未賦值,則有默認值類中定義的成員方法類中定義的成員方法對象(I) 對象是類的實例化體現(xiàn) 每個對象都擁有各自的成員變量和成員方法 通過對象可以使用類中的變量和方法,類似于 C 語言中的結構體變量 利用類名創(chuàng)建對象,類似于用數(shù)據(jù)類型創(chuàng)建變量一樣對象(II) 創(chuàng)建對象實例,并調用對象方法:Student stu1 = new Student();Student stu2 = stu1;/利用已有對象為新對象賦值(

3、指針)利用已有對象為新對象賦值(指針)stu1.SelfIntr();stu2.SelfIntr(); 改變對象中成員變量的值Student stu3 = new Student(); = Kitty;stu3.SelfIntr();棧id = 0name = Jacksonage = 20堆stu1stu2若通過若通過stu2stu2去改去改變其中成員變量變其中成員變量的值,對的值,對stu1stu1也也有影響有影響匿名對象 如果臨時臨時需要使用類中的一個方法,我們可以利用匿名對象來調用,而不必顯示地創(chuàng)建一個對象,如:Student stu = new Student();

4、stu.selfIntr();這兩條語句可以直接寫成下面的形式:new Student().selfIntr();屬性和方法 屬性:描述事物的特征(成員變量) 方法:事物所具有的功能(成員方法)類別屬性方法學生學號、姓名、性別、年齡、身高、體重、民族學習、表演、比賽、自我介紹等汽車品牌、生產商、型號、顏色、功率、時速行駛、載人、剎車方法的格式 既無參數(shù)也無返回值的方法,如:void fun() 有參數(shù)但無返回值的方法,如:void fun(int a, char ch) 無參數(shù)但有返回值方法,如:double fun() 既有參數(shù)又有返回值的方法,如:int fun(string s)方法中的

5、參數(shù)(I) 方法中參數(shù)的傳遞值傳遞、引用傳遞-ref、輸出參數(shù)-out,例:class Test static void Main()void fun(ref int x, ref int y) int t = x;int a = 3, b = 5;x = y;new Test().fun(ref a, ref b);y = t;Console.WriteLine(a = + a);Console.WriteLine(a = + a); 將上面代碼中的 ref 關鍵字去掉,就成了按值傳遞,再把 ref 換成 out 試試!方法中的參數(shù)(II) ref 與 out 的區(qū)別:1、ref 必須在函數(shù)

6、體外初始化。2、out 必須在函數(shù)體內初始化,在外面初始化沒意義。也就是說,out型的參數(shù)在函數(shù)體內不能得到外面?zhèn)鬟M來的初始值。3、兩者在函數(shù)體的任何修改都將影響到外面。ref-接收外面的值out-向外界輸出值變長參數(shù) 使用變長參數(shù)可以接收多個不確定個數(shù)的參數(shù),用關鍵字 params。變長參數(shù)必須位于形參列表的最后,而且只能是一維數(shù)組。params 不能與 ref 和 out 聯(lián)用:static void print(params int a) Console.Write(有0個元素,a.Length); foreach(int i in a) Console.Write(i); static

7、 void Main() int arr = 3, 9, 2; print(arr); print(35, 67, 88, 91, 16); print();方法中的 return 關鍵字 如果方法的返回值類型不是void,那么在方法內部必須要有 return 語句 如果返回值類型為void,那么 return 語句在方法內部可有可無。若寫上了return 關鍵字,其后面不加返回值,return 可以結束當前方可以結束當前方法的調用法的調用注意可能會出現(xiàn)無法訪問的語句注意可能會出現(xiàn)無法訪問的語句this 關鍵字 方法中的變量會隱藏掉同名的成員變量class Testpublic int num

8、=3;public void fun() int num=7; Console.WriteLine(num=+num);注:注:this 關鍵字僅代表當前類的對象!關鍵字僅代表當前類的對象!如何在 fun() 方法內使用此處的 num 變量呢?使用 this 關鍵字,代表當前類的對象,調用類中的直接成員調用類中的直接成員Console.WriteLine(this.num=+this.num);方法的重載 方法名相同,但方法中參數(shù)參數(shù)的個數(shù)、類型及順序不同,即為重載 方法的返回值不參與重載。如下:void fun(int x);int fun(int x);void fun(int x);in

9、t fun(int x, int y);void fun(int x, double y);void fun(double y, int x);不是重載,編譯報錯是重載,可以使用是重載,可以使用構造方法(I) 完成對類實例對象的初始化初始化工作。一般(通過方法的參數(shù))用來對類的成員變量進行初始化操作。有以下幾點特征:1、具有與類相同的名稱、具有與類相同的名稱2、沒有返回值類型、沒有返回值類型3、該方法內部沒有、該方法內部沒有 return 語句語句 當一個新的對象生成時,構造方法由系統(tǒng)自動調用自動調用,而且只執(zhí)行一次只執(zhí)行一次例:戰(zhàn)士們進入陣地時,每個人都會自動完成臥倒、瞄例:戰(zhàn)士們進入陣地時

10、,每個人都會自動完成臥倒、瞄準等動作,指揮官沒有必要一一告訴準等動作,指揮官沒有必要一一告訴構造方法(II) 每個類都必須要有構造方法 如果我們在類中沒有顯式地定義構造方法,系統(tǒng)將提供一個不帶參數(shù)的、什么都不做的構造方法 一旦我們定義了構造方法,系統(tǒng)將不再提供默認的構造方法class Student int id; string name; public Student (int id, string name) this.id = id; = name; 一旦在構造方法前面一旦在構造方法前面加上了加上了void 關鍵字,關鍵字,那么它將成為一個普那么它將成為一個普通的成員

11、方法!通的成員方法!構造方法的重載class Student public int id = 2; public string name = Tom; public int age = 21; public Student(int id, string name, int age) this.id=id; =name; this.age=age; public Student(int id, string name) this.id=id; =name; public Student()/以下是主方法中的操作以下是主方法中的操作public static v

12、oid main(Stringargs) Student stu1=new Student(); Student stu2=new Student(103,Mike); Student stu3=new Student(107,Mary,18);含有三個參數(shù)的構造方法含有三個參數(shù)的構造方法含有二個參數(shù)的構造方法含有二個參數(shù)的構造方法無參構造方法無參構造方法析構方法 以符號開頭,用于執(zhí)行清除關閉工作 不接收參數(shù)、沒有返回值、沒有修飾符 析構方法不能重載 一個類只能有一個析構方法 在垃圾收集器拋棄一個對象之前,先調用析構方法 不能手動調用,只能由垃圾器調用封裝 用 public 關鍵字修飾的類中成

13、員,在類的外部就可以隨意調用。但這樣的寫法安全性差class Test const double PI = 3.14; public double s; public double GetS(int r) s = PI * r * r; return s; s的值在類外部可以隨意改動,造成錯誤結果將代碼改為:private double s;這樣一來,外界無法直接調用s,避免出錯。封裝的作用在于保證類中重要成員的私有性和安全性!封裝的作用在于保證類中重要成員的私有性和安全性!公共訪問器 在實際開發(fā)中最好把所有的成員變量都設置為 private,若要讀取或設置該成員變量的值,可以編寫公共訪問器方

14、法。這樣做便于代碼的維護和修改 在公共訪問器中,我們可以對變量的合法性進行檢驗,還可以盡量避免修改代碼時產生 “牽一發(fā)而動全身” 的情況出現(xiàn) 公共訪問器以 Get 或 Set 作為前綴見示例:見示例:靜態(tài)成員 在類中,用 static修飾的靜態(tài)成員從一開始就存在,而無須用 new 來創(chuàng)建;也就是說在類的對象產生之前,static 成員就已經出現(xiàn)了;沒有用static修飾的成員被稱為“實例成員” 無論創(chuàng)建多少類的實例對象,它們都共用同一個(組)static 成員 static 成員只能只能用類名直接調用 靜態(tài)方法中不能不能使用 this 關鍵字靜態(tài)與實例成員的相互調用 靜態(tài)方法不能調用實例成員

15、實例方法可以調用靜態(tài)成員靜態(tài)成員空間靜態(tài)成員空間實例空間實例空間實例空間實例空間實例空間實例空間命名空間 命名空間用以避免類名的沖突,對類再進一步分類(見示例:)(見示例:) 創(chuàng)建命名空間用 namespace關鍵字,導入命名空間用 using關鍵字(using 別名=命名空間名;) 在 C# 的文件中可以出現(xiàn)多個命名空間,而且可以使用大括號分層嵌套 可以使用 . 創(chuàng)建一個命名空間的子空間 using導入的成員名會被當前空間中的同名成員所隱藏,此時需要使用限定名稱裝箱與拆箱 是值類型與引用類型間的相互轉換 在C#中每一種類型都是從System.Object類派生而來的 值類型轉換成對象:裝箱 對象轉換成值類型:拆箱int myInt1 = 28;object myObject = myInt1;/裝箱string str = myInt1.ToString();/裝箱int myInt2 = (int)myObject;/拆箱object 與 System.Object 是相同的is 運算符 is 運算符用于檢查某一變量或對象是否與指定類型兼容,以確定是

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論