版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C#的核心是面向對象程序設計,C#支持所有關鍵的面向對象的概念,如封裝、繼承和多態(tài)性。封裝封裝是一種程序設計機制,它綁定代碼及其操作的數(shù)據(jù),并使它們不受外界干涉和誤用的影響,從而保證安全性C#的基本單元是類,類定義對象的形式,它指定數(shù)據(jù)和操作這些數(shù)據(jù)的代碼。.多態(tài)性它定義一個接口,多個方法。.繼承它是一個對象獲得另一個對象的屬性的過程。類基礎類基礎類實際上是創(chuàng)建對象的模板,每個對象都包含數(shù)據(jù),類實際上是創(chuàng)建對象的模板,每個對象都包含數(shù)據(jù),并提供了處理和訪問數(shù)據(jù)的方法。類定義了每個對象并提供了處理和訪問數(shù)據(jù)的方法。類定義了每個對象可以包含什么數(shù)據(jù)和功能,但類自己不能包含數(shù)據(jù)??梢园裁磾?shù)據(jù)和功
2、能,但類自己不能包含數(shù)據(jù)。比如一個類代表一個人,它就可以定義所有與人相關比如一個類代表一個人,它就可以定義所有與人相關的信息身高、年齡、體重等)。使用時,實例化對的信息身高、年齡、體重等)。使用時,實例化對象表示某一個人。象表示某一個人。 說明:說明:使用類聲明可以創(chuàng)建新的類類型。類聲明以一個聲明頭開始,使用類聲明可以創(chuàng)建新的類類型。類聲明以一個聲明頭開始,其組成方式如下:先類的名字,它由一組包含在大括號(其組成方式如下:先類的名字,它由一組包含在大括號()中)中的成員聲明組成。的成員聲明組成。 public表示可以在類定義和派生類的層次結構之外訪問此成員private不能在定義此成員的類之外
3、訪問它,即使是派生類也不能訪問此成員internal從類型只限本程序訪問所在的 assembly 訪問protected只限本類及其派生類訪問成員C#訪問修飾符為:訪問修飾符為:類里面的成員除了具備類訪問修飾符外,還有下列的修飾符可用:const 聲明成員是常量event 聲明成員是事件new 用于隱藏基類base的成員override用于覆蓋基類中的virtual,static,abstract成員readonly 聲明成員是只讀的static 聲明成員是靜態(tài)成員 virtual 聲明成員是虛擬成員,讓派生類的成員實現(xiàn)定義常量定義常量常量聲明的語法如下:常量聲明的語法如下:修飾符修飾符con
4、st 類型常量標示符;類型常量標示符;下列在類下列在類A中聲明個常量,分別為中聲明個常量,分別為X=1.0,Y=2.0,Z=3.0;class Apublic const double X=1.0,Y=2.0,Z=3.0;不允許在常數(shù)聲明中使用不允許在常數(shù)聲明中使用 static 修飾符。修飾符。常數(shù)可以參與常數(shù)表達式,例如:常數(shù)可以參與常數(shù)表達式,例如:public const int c1 = 5;public const int c2 = c1 + 100;定義字段定義字段當從類創(chuàng)建一個對象實體時,該對象將包含該類定義里所有當從類創(chuàng)建一個對象實體時,該對象將包含該類定義里所有的變量字段)
5、,這些變量可分為兩個大類,屬于對象實體的變量字段),這些變量可分為兩個大類,屬于對象實體個別的以及屬于類全體的個別的以及屬于類全體的每個對象實體都會拷貝一份屬于對象自己的變量,可各自設每個對象實體都會拷貝一份屬于對象自己的變量,可各自設置它們的值,這種變量稱為對象實體變量置它們的值,這種變量稱為對象實體變量屬于類全體的變量為該類所有的對象所共同擁有,不論你對屬于類全體的變量為該類所有的對象所共同擁有,不論你對該類創(chuàng)建多少個對象,屬于類的變量只保存一份,這種變量該類創(chuàng)建多少個對象,屬于類的變量只保存一份,這種變量稱為類變量稱為類變量 class Circle public const doubl
6、e PI = 3.14159; private double xCenter; private double yCenter; private double radius;以上定義一個Circle類,屬于公有的,PI屬于類常量,它默認為static屬性,屬于Circle所有對象所共有的,因此只有一份拷貝xCenter,yCenter,radius這三個變量都屬于對象變量,每個對象都有一份拷貝 xCenter=3.1 yCenter=5.0 radius=7 xCenter=6.1 yCenter=12.0 radius=8 PI=3.14159Circle1Circle2類變量既然與對象無關,
7、那么要訪問它并不需要創(chuàng)建對象,只需寫上類名稱,其后跟著小數(shù)點和類變量名稱就可以了如:類名稱類變量名稱因此要訪問PI只需寫成: Circle .PI訪問對象變量,需要創(chuàng)建對象,只需寫上對象名稱,其后跟著小數(shù)點和對象變量名稱就可以了如:對象名稱對象變量名稱Circle circle1=new Circle() circle1.radius例:例:using System; class Circle public const double PI=3.14159; public double xCenter; public double yCenter; public double radius; c
8、lass VariableTest public static void Main() Circle circle1 = new Circle(); Console.WriteLine(常數(shù)常數(shù) PI = 0, Circle.PI); Console.WriteLine(變量變量 radius = 0, circle1.radius); 如何創(chuàng)建對象如何創(chuàng)建對象在前面的程序中我們通過執(zhí)行下面語句創(chuàng)建了一個對象:Circle circle1 = new Circle();該聲明語句執(zhí)行二個功能:第一聲明一個稱為circle1的Circle類類型的變量,該變量不定義對象,實際上它僅僅是一個包含所創(chuàng)
9、建對象引用的引用變量,第二,使用new運算賦可以創(chuàng)建一個實際物理對象,并將此對象的引用分配給circle1。因此可以編寫成獨立分開的形式:Circle circle1;circle1=new Circle();using System; class Building public int floors; / number of floors public int area; / total square footage of building public int occupants; / number of occupants class BuildingDemo public static
10、 void Main() Building house = new Building(); Building office = new Building(); int areaPP; / area per person / assign values to fields in house house.occupants = 4; house.area = 2500; house.floors = 2; / assign values to fields in office office.occupants = 25; office.area = 4200; office.floors = 3;
11、 / compute the area per person in house areaPP = house.area / house.occupants; Console.WriteLine(house has:n + house.floors + floorsn + house.occupants + occupantsn + house.area + total arean + areaPP + area per person); Console.WriteLine(); / compute the area per person in office areaPP = office.ar
12、ea / office.occupants; Console.WriteLine(office has:n + office.floors + floorsn + office.occupants + occupantsn + office.area + total arean + areaPP + area per person); houseoffice定義方法定義方法字段變量和方法是類的兩個主要組成部分,前面的Building類只包含數(shù)據(jù)而不包含方法,雖然只有數(shù)據(jù)的類完全有效,但大多數(shù)類是需要包含方法的。在一個類里定義的方法,提供針對類里的變量所運行的一些操作,就像類里的變量有類變量和對
13、象變量一樣,方法也有類方法和對象方法類方法不需要對象就可以運行,但對象方法必須通過指定的對象才能運行using System; class Building public int floors; / number of floors public int area; / total square footage of building public int occupants; / number of occupants / Display the area per person. public void areaPerPerson() Console.WriteLine( + area /
14、occupants + area per person); / Use the areaPerPerson() method. class BuildingDemo public static void Main() Building house = new Building(); Building office = new Building(); / assign values to fields in house house.occupants = 4; house.area = 2500; house.floors = 2; / assign values to fields in of
15、fice office.occupants = 25; office.area = 4200; office.floors = 3; Console.WriteLine(house has:n + house.floors + floorsn + house.occupants + occupantsn + house.area + total area); house.areaPerPerson(); Console.WriteLine(); Console.WriteLine(office has:n + office.floors + floorsn + office.occupants
16、 + occupantsn + office.area + total area); office.areaPerPerson(); public class Circle public static int count=1; public const double PI=3.14159; public double xCenter; public double yCenter; public double radius;public static int getCount() return count; 屬于類的方法為該類所有的對象共同擁有,不論你對該類創(chuàng)建多少個對象,屬于類的方法只保存一份
17、,這種方法也稱為靜態(tài)方法,聲明時前面要加上static修飾符public void setRadius(double r) radius = r; public double area() return PI*radius*radius; 以上定義一個Circle類,屬于公有的,getCount()屬于類方法,只有一份拷貝。類方法既然與對象無關,那么要訪問它并不需要創(chuàng)建對象,只需寫上類名稱,其后跟著小數(shù)點和類方法名稱就可以了如:類名稱類方法名稱要調用getCount()方法只需寫成:Circle.getCount()訪問對象方法,需要創(chuàng)建對象,只需寫上對象名稱,其后跟著小數(shù)點和對象方法名稱就可
18、以了如:對象名稱對象方法名稱 Circle circle1 = new Circle(); Circle circle2 = new Circle(); circle1.area() circle2.area()例:using System;public class Circle public static int count=1; public const double PI=3.14159; public double xCenter; public double yCenter; public double radius; public static int getCount() ret
19、urn count; public void setRadius(double r) radius = r; public double area() return PI*radius*radius; class MethodTest public static void Main() Circle circle1 = new Circle(); Circle circle2 = new Circle(); Console.WriteLine(類方法 Circle.getCount()=0, Circle.getCount(); circle1.setRadius(10.0); Console
20、.WriteLine(circle 對象設定半徑為 10.0 后n + 調用 area()方法 circle1.area()=0,circle1.area(); circle2.setRadius(20.0); Console.WriteLine(circle2 對象設定半徑為 20.0 后n + 調用 area()方法 circle2.area()=0,circle2.area(); static關鍵字關鍵字基本上聲明為static關鍵字的變量是靜態(tài)變量,當聲明它所在的類時,不產生靜態(tài)變量的副本,而是類的實例共享同一個靜態(tài)變量。建立類時,初始化靜態(tài)變量。如果不指定任何顯示初始值,那么對于數(shù)字
21、類型,將它初始化為0,對于對象引用,初始化為null;對于bool類型的變量,初始化為false。因此靜態(tài)變量總是有值的。靜態(tài)方法和實例方法之間的區(qū)別是:靜態(tài)方法能通過其類名來調用,而不需要創(chuàng)建該方法的對象。using System; class StaticDemo / a static variable public static int val = 100; / a static method public static int valDiv2() return val/2; class SDemo public static void Main() Console.WriteLine(
22、Initial value of StaticDemo.val is + StaticDemo.val); StaticDemo.val = 8; Console.WriteLine(StaticDemo.val is + StaticDemo.val); Console.WriteLine(StaticDemo.valDiv2(): + StaticDemo.valDiv2(); 下面類中,靜態(tài)方法valDivDemo()是非法的。class StaticError int denom = 3; / a normal instance variable static int val = 10
23、24; / a static variable /* Error! Cant directly access a non-static variable from within a static method. */ static int valDivDenom() return val/denom; / wont compile! 試圖從該類的靜態(tài)方法調用非靜態(tài)方法時,出現(xiàn)同樣的問題。using System; class AnotherStaticError / non-static method. void nonStaticMeth() Console.WriteLine(Inside
24、 nonStaticMeth().); /* Error! Cant directly call a non-static method from within a static method. */ static void staticMeth() nonStaticMeth(); / wont compile 理解下面一點是很重要的:靜態(tài)方法能夠調用實例理解下面一點是很重要的:靜態(tài)方法能夠調用實例方法,能夠訪問所在類的實例變量,但是,必須通方法,能夠訪問所在類的實例變量,但是,必須通過該類的對象來實現(xiàn)。沒有對象限定,這是不可能過該類的對象來實現(xiàn)。沒有對象限定,這是不可能的。的。class
25、MyClass / non-static method. void nonStaticMeth() Console.WriteLine(Inside nonStaticMeth().); /* Can call a non-static method through an object reference from within a static method. */ public static void staticMeth(MyClass ob) ob.nonStaticMeth(); / this is OK 從方法返回從方法返回通常要使方法返回有兩個條件。第一:如上面示例中顯示的通常要
26、使方法返回有兩個條件。第一:如上面示例中顯示的nonStaticMeth()方法一樣,遇到方法的右大括號。第二:執(zhí)方法一樣,遇到方法的右大括號。第二:執(zhí)行行return語句。語句。return有兩種形式:一種用于有兩種形式:一種用于void類型的方法類型的方法即不返回的方法),另一種用于返回值。即不返回的方法),另一種用于返回值。public void myMeth() int i; for(i=0; i10; i+) if(i = 5) return; / stop at 5 Console.WriteLine(); using System;class Vehicle/定義汽車類publi
27、c int wheels; /公有成員輪子個數(shù) protected float weight; /保護成員重量 static int count=110; void Print(int x,int y) wheels=x; weight=y; public static void Main() Vehicle Ve=new Vehicle(); Ve.wheels = 4;/正確允許訪問自身成員 Ve.weight = 10; /正確允許訪問自身成員Console.WriteLine(wheels=0,weight=1,Ve.wheels,Ve.weight); Ve.Print(4,20);
28、Console.WriteLine(wheels=0,weight=1,Ve.wheels,Ve.weight); Console.WriteLine(count); 構造函數(shù)構造函數(shù)在前面的示例中,每個在前面的示例中,每個Vehicle類型的對象的實例類型的對象的實例變量必須通過使用一系列語句來手動設置,如:變量必須通過使用一系列語句來手動設置,如:Ve.wheels = 4;/正確允許訪問自身成員正確允許訪問自身成員 Ve.weight = 10; /正確允許訪問自身成員正確允許訪問自身成員有一種更好的實現(xiàn)此任務的方法:構造函數(shù)有一種更好的實現(xiàn)此任務的方法:構造函數(shù)構造函數(shù)在對象創(chuàng)建時初始
29、化對象,其名稱與類名構造函數(shù)在對象創(chuàng)建時初始化對象,其名稱與類名相同,而且語法上,類似與方法,但是構造函數(shù)沒相同,而且語法上,類似與方法,但是構造函數(shù)沒有明確的返回類型。有明確的返回類型。下面是一個名為Point的簡單類的聲明: class Point public int x, y; public Point(int x1, int y1) x = x1; y = y1; 使用new運算符創(chuàng)建類的實例,它將為新實例分配內存,調用構造函數(shù)初始化實例,并且返回對該實例的引用。下面的語句創(chuàng)建兩個Point對象,并且將那些對象的引用保存到兩個變量中: Point p1 = new Point(0,
30、0); Point p2 = new Point(10, 20);當不再使用對象時,該對象所占的內存將被自動回收。在C#中,沒有必要也不可能顯式地釋放對象。請注意:不論是否定義了構造函數(shù),所有類都有構造函數(shù),因為C#自動提供默認構造函數(shù)無參數(shù)),默認構造函數(shù)將所有成員變量初始化為對于值類型或null對于引用類型),但是一旦定義了自定義的構造函數(shù),就不在使用默認構造函數(shù)。using System; class MyClass public int x; public MyClass(int i) x = i; class ParmConsDemo public static void Main(
31、) MyClass t1 = new MyClass(10); MyClass t2 = new MyClass(); Console.WriteLine(t1.x + + t2.x); using System; class MyClass public int x; public MyClass(int i) x = i; public MyClass() x =5; class ParmConsDemo public static void Main() MyClass t1 = new MyClass(10); MyClass t2 = new MyClass(); Console.W
32、riteLine(t1.x + + t2.x); 正確如下:無用單元收集和析構函數(shù)無用單元收集和析構函數(shù)大家已經看到,通過使用new運算符能從空閑內存池動態(tài)給對象分配空間。C#的無用單元收集系統(tǒng)能自動回收對象:其工作步驟如下:不存在對象的引用時,就認為該對象不再需要,而且釋放它所占用的內存,然后,這些回收的內存能用于隨后的分配。C#運行時系統(tǒng)只再需要時才激活無用單元收集系統(tǒng),因此我們不能確切知道無用單元收集是何時進行得。但是我們可以定義一個在無用單元收集程序進行對象的最后消除之前的方法,這是可以得。析構函數(shù)析構函數(shù)析構函數(shù)是實現(xiàn)銷毀一個類的實例的方法成員。析構函數(shù)不能有參數(shù),不能任何修飾符而且不能被調用。由于析構函數(shù)的目的與構造函數(shù)的相反,就加前綴以示區(qū)別。雖然C#(更確切的說是CLR提供了一種新的內存管理機制-自動內存管理機制Automatic memory management),資源的釋放
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新高考數(shù)學題型全歸納之排列組合專題19列舉法策略含答案及解析
- 2021年高考英語三輪復習:閱讀理解+完形填空+讀后續(xù)寫+七選五+應用文寫作 試題匯編(含答案解析)
- 第一課 遠離不健康內容(說課稿)-2023-2024學年六年級下冊綜合實踐活動滬科黔科版
- 2021高考排列組合歸納20大專題(解析版)
- 2020初級會計實務試題及答案
- 2018年上半年國家教師資格考試真題試卷
- 2024年07月湖北漢口銀行授信管理部社會招考(726)筆試歷年參考題庫附帶答案詳解
- 2024年渠縣人民醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 2024年深圳市眼科醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 2024年淮南礦務局第三礦工醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 2024版【人教精通版】小學英語六年級下冊全冊教案
- 2024年秋八年級歷史上冊 第24課 人民解放戰(zhàn)爭的勝利教案 新人教版
- 預算法及實施條例測試題(含答案)
- 提高護士應用PDA落實患者身份識別準確率 2
- 游戲產品自行審核工作報告
- 1.1 我與社會 課件-2024-2025學年道德與法治八年級上冊(統(tǒng)編版2024)
- 廚政管理說課市公開課一等獎省賽課微課金獎課件
- 遵守道德規(guī)范錘煉道德品格專題第3講 投身崇德向善的道德實踐1課件
- 《高等數(shù)學教程》全套教學課件
- 黑龍江省2025屆高三最后一卷歷史試卷含解析
- 2024年天津市中考英語試題卷(含答案)
評論
0/150
提交評論