




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第3章 面向?qū)ο蟪绦蛟O(shè)計(jì)一、對(duì)象和類 OOP(Object-Oriented Programming)是一種基于對(duì)編程元素的現(xiàn)實(shí)理解,允許程序員在編程時(shí)即定義數(shù)據(jù)元素,又定義可對(duì)這些數(shù)據(jù)元素進(jìn)行的操作。· 對(duì)象:包含數(shù)據(jù)和操作的實(shí)體,如汽車、人等。 · 類:是 C# 中的一種結(jié)構(gòu),用于在程序中模擬現(xiàn)實(shí)生活的事物。 · 定義訪問修飾符 class <類名> / 類的主體
2、160; 如: class Employee / 類的主體 · 成員變量 · 語法:訪問修飾符 類型 成員變量; · 說明:訪問修飾符主要有以下幾鐘: public:可以被所有類訪問 internal:可以被當(dāng)前程序集訪問 protected:可被所屬類和子類訪問
3、160; private:只能被所屬類訪問 · 類的默認(rèn)訪問修飾符為internal,而類成員為private。 · protected、public和internal修飾的成員變量采用帕斯卡命名法,私有成員采用駱駝命名法。 · 示例:分析員工類Employee中需要包含姓名、性別、職稱、薪水等信息,因此可以定義一個(gè)如下所示的類: class Employee private string _nam
4、e; private char _gender; private string _qualification; private uint _salary; · 若要訪問Employee類中的屬性,則應(yīng)先創(chuàng)建類的實(shí)例或?qū)ο蟆?#160; Emp
5、loyee objEmployee = new Employee(); · 使用點(diǎn)號(hào)訪問成員變量 objEmployee._name = “張三" objEmployee._name = 'M' 二、構(gòu)造函數(shù)和析構(gòu)函數(shù)· 構(gòu)造函數(shù) 類的一種特殊方法,每次創(chuàng)建類的實(shí)例都會(huì)調(diào)用它,
6、其功能是將成員變量的值初始化為某個(gè)默認(rèn)值。 語法: 訪問修飾符 類名(參數(shù)) / 構(gòu)造函數(shù)的主體
7、; 說明: Ø 可以帶參數(shù)Ø 無返回值Ø 若類中沒有定義構(gòu)造函數(shù),則運(yùn)行庫將自動(dòng)提供默認(rèn)的無參的構(gòu)造函數(shù)。示例1:無參的構(gòu)造函數(shù)class Employeeprivate string _name; private char _gender; private string _qualification;
8、160; private uint _salary;/ 默認(rèn)構(gòu)造函數(shù) private Employee() _qualification = “研究生" static void Main(string args) / 調(diào)用默認(rèn)構(gòu)造函數(shù)
9、160; Employee objEmployee = new Employee(); Console.WriteLine(“資格= " + objEmployee._qualification); Console.WriteLine(“薪水= " + objEmployee._salary);
10、60; 示例2:帶摻的構(gòu)造函數(shù)class Employeeprivate string _name; private char _gender; private string _qualification; private uint _salary;/ 默認(rèn)構(gòu)造函數(shù) private Employee() _qualification = “大學(xué)
11、畢業(yè)生"/ 參數(shù)化構(gòu)造函數(shù)private Employee(string strQualification, string strName,char gender, uint empSalary) _qualification = strQualification; _name = strName;
12、 _gender = gender; _salary = empSalary; &
13、#160; public static void Main(string args) / 調(diào)用默認(rèn)構(gòu)造函數(shù)
14、 Employee objGraduate = new Employee(); / 調(diào)用參數(shù)化構(gòu)造函數(shù) Em
15、ployee objMBA = new Employee(“ACCPS3“, ”張亮影“, 男', 5500); Console.WriteLine(“默認(rèn)構(gòu)造函數(shù)輸出: n資格=“ + objGraduate._qualification);
16、 Console.WriteLine(“n參數(shù)化構(gòu)造函數(shù)輸出: n資格= " +objMBA._qualification); · 析構(gòu)函數(shù) 是C#中的另一種特殊方法,用于執(zhí)行清除操作。聲明方法與構(gòu)造函數(shù)類似,只是在名字前加沙鍋內(nèi)代子號(hào)()。 Ø 語法 類名()
17、; / 析構(gòu)函數(shù)的主體 Ø 說明 一個(gè)類只能有一個(gè)析構(gòu)函數(shù) 析構(gòu)函數(shù)不能重載 不能顯式或手動(dòng)調(diào)用,只能由垃圾回收器自動(dòng)調(diào)用。 Ø 示例:
18、60; Employee() /實(shí)現(xiàn)析構(gòu)函數(shù)三、方法 方法可執(zhí)行對(duì)象的行為,類中的方法通常包括在調(diào)用類時(shí)要使用的操作語句。· 方法聲明 語法: 訪問修飾符 返回類型 方法名(參數(shù)列表) &
19、#160; /方法的主體 · 說明: 方法不返回值,則返回類型為void。若需要,則用return 表達(dá)式帶回返回值。 參數(shù)列表可選。 訪問修飾符默認(rèn)為private。 · 示例 class Point
20、 int x; int y; void Assign() System.Console.WriteLine(“輸入點(diǎn)的值");
21、60; x = int.Parse(System.Console.ReadLine(); y = int.Parse(System.Console.ReadLine(); · 調(diào)用方法 格式:對(duì)
22、象名.方法(參數(shù)列表); 示例 class ComplexNumber private int _real;
23、 private int _imaginary; private void Accept()
24、; Console.WriteLine(“請(qǐng)輸入實(shí)數(shù)部分"); _real = int.Parse(Console.ReadLine(); &
25、#160; Console.WriteLine(“請(qǐng)輸入虛數(shù)部分"); _imaginary = int.Parse(Console.ReadLine();
26、0; void ShowResult() Console.WriteLine(
27、“相加之和為:"); Console.WriteLine(_real + "+" + _imaginary + "i");
28、60; / 此方法用于將兩個(gè)復(fù)數(shù)相加 ComplexNumber Add(ComplexNumber objParam1)
29、; objParam1._real += _real ; objParam1._imaginary += _
30、imaginary; return objParam1;
31、 STAThread public static void Main(string args) ComplexNumber objNumber
32、1 = new ComplexNumber(); ComplexNumber objNumber2 = new ComplexNumber(); objNumber1.Accept();
33、60; objNumber2.Accept(); ComplexNumber objTemp = objNumber1.Add(objNumber2); objTemp.ShowR
34、esult(); 四、方法重載 在實(shí)際生活中,有些職責(zé)或任務(wù)有共同的名稱,例如,我們每個(gè)月都會(huì)有各種需要支付的費(fèi)用,如電話費(fèi)、手機(jī)費(fèi)、電費(fèi)、煤氣費(fèi)、水費(fèi)等。雖然都叫付費(fèi),但其支付的過程可能不同,因此,在C#中,可以利用方法重載來實(shí)現(xiàn)付費(fèi)這一任務(wù)。例如: Class BillPayment
35、 void PayBill(int telephoneNumber) /此方法用于支付固定電話話費(fèi) void PayBill(long consume
36、rNumber) /此方法用于支付電費(fèi) void PayBill(long consumerNumber, double amount) &
37、#160; /此方法用于支付移動(dòng)電話話費(fèi) 注意,不能根據(jù)返回類型來重載方法。· 基于不同數(shù)量的參數(shù)的方法重載 int greatest(int num1, int num2)
38、160; Console.WriteLine(“0 和 1 相比, 最大的是: ", num1, num2); if(num1 > num2)
39、60; return num1; else
40、; return num2; int greatest(int num1, int num2, int num3) Console.WriteLine(“0, 1 和 2 相比, 最大的是: ", num1, num2, num3);
41、; if(num1 > num2 && num1 > num3) return num1;
42、160; else if(num2 > num1 && num2 > num3) return num2; &
43、#160; else return num3; ·
44、 基于不同類型的參數(shù)的方法重載 int greatest(int numbers) int temp = numbers0; for(int i = 1;i < numbers.Length;i+)
45、0; if(temp < numbersi) temp = numbersi;
46、; return temp; double greatest(double numbers) double temp = numbers0; for(int i = 1;i < numbers.Length;i+)
47、160; if(temp < numbersi) temp = numbersi;
48、160; return temp; 五、屬性 C#中通過屬性特性來讀取和寫入字段,而不直接進(jìn)行讀取和寫入,以此來提供對(duì)字段的進(jìn)一步保護(hù)。用戶可以象訪問字段那樣訪問屬性。因此,屬性進(jìn)一步對(duì)類的數(shù)據(jù)進(jìn)行了封裝。· 格式: 訪問修飾符 數(shù)據(jù)類型 屬性名 get ; set ; · 例如:
49、160; class Employee private static string _name; private static string _id; public string Id /屬性名,公有的采用帕斯卡命名,私有的采用駱駝命名
50、0; /讀取屬性 get return _id;
51、60; / 設(shè)置屬性 set &
52、#160; / 驗(yàn)證輸入長(zhǎng)度小于 2 if (_id.Length > 2) &
53、#160; _id = value; · 屬性類型 可讀可寫
54、0; 只讀 訪問修飾符 數(shù)據(jù)類型 屬性名 get ; &
55、#160; 只寫 訪問修飾符 數(shù)據(jù)類型 屬性名 set ; · 靜態(tài)屬性訪問修飾符s
56、tatic 數(shù)據(jù)類型 屬性名get;set; 該屬性屬于整個(gè)類,而不是類的實(shí)例。 · 綜合示例 class SavingsAccount / 類字段用于存儲(chǔ)帳號(hào)、余額和已獲利息 private int _accountNumber;
57、 private double _balance; private double _interestEarned; / 利率是靜態(tài)的,因?yàn)樗袔臬@得的利息相同 private static double _interestRate;
58、60; / 構(gòu)造函數(shù)初始化類成員 public SavingsAccount(int accountNumber, double balance)
59、0; this._accountNumber = accountNumber; this._balance = balance; &
60、#160; / 只讀 AccountNumber 屬性 public int AccountNumber get
61、60; return _accountNumber;
62、60; / 只讀Balance屬性 public double Balance
63、60; get if (_balance < 0) &
64、#160; Console.WriteLine("沒有可用余額"); return _balance;
65、0; /讀寫InterestEarned屬性 public double InterestEarned get
66、60; return _interestEarned; set
67、60; / 驗(yàn)證數(shù)據(jù) if (value < 0.0)
68、 Console.WriteLine(“利息不能為負(fù)數(shù)");
69、; return; _interestEarned = value; &
70、#160; /靜態(tài)屬性InterestRate public static double InterestRate
71、 get return _interestRate;
72、 set / 驗(yàn)
73、證數(shù)據(jù) if (value < 0.0)
74、 Console.WriteLine(“利率不能為負(fù)數(shù)");
75、return; else
76、; _interestRate = value / 100;
77、; static void Main(string args)
78、60; / 創(chuàng)建 SavingsAccount 的對(duì)象 SavingsAccount objSavingsAccount = new SavingsAccount(12345, 5000);
79、; Console.WriteLine(“輸入到現(xiàn)在為止已獲得的利息和利率"); objSavingsAccount.InterestEarned = In
80、t64.Parse(Console.ReadLine(); SavingsAccount.InterestRate = Int64.Parse(Console.ReadLine();
81、0; objSavingsAccount.InterestEarned += objSavingsAccount.Balance * SavingsAccount.InterestRate; Console.WriteLine("獲得的總利息為: 0",
82、; objSavingsAccount.InterestEarned); 六、索引器 請(qǐng)看一個(gè)例子,一家公司某個(gè)部門人數(shù)很多,假設(shè)部門經(jīng)理需要一份員工記錄,或許是用于更新資料,或許只是了解一
83、個(gè)信息,不定義傳統(tǒng)的方法來設(shè)置職員記錄或其他方法來獲取職員記錄,而是在類中定義一個(gè)索引器,是很有道理的,索引器可以為員工的編號(hào)。索引器是一種特殊的方法,索引器允許使用方括號(hào)進(jìn)行訪問,而不是常規(guī)的get和set方法調(diào)用。使用索引器,使客戶端代碼更簡(jiǎn)潔。· 語法 訪問修飾符 數(shù)據(jù)類型 this數(shù)據(jù)類型 標(biāo)識(shí)符 get; set;
84、60; · 說明 索引器一般用于類的數(shù)組元素 允許按數(shù)組方式來檢索對(duì)象的數(shù)組元素。· 示例 class Photo string _title; public Photo(string title) &
85、#160; this._title = title; public string Title
86、 get
87、 return _title; &
88、#160; class Album / 該數(shù)組用于存放照片
89、; Photo photos; public Album(int capacity)
90、; photos = new Photocapacity;
91、 public Photo thisint index
92、160; get
93、 / 驗(yàn)證索引范圍 if (index < 0 | index >= photos.Length)
94、; Console.WriteLine(&q
95、uot;索引無效"); / 使用 null 指示失敗
96、; return null; &
97、#160; / 對(duì)于有效索引,返回請(qǐng)求的照片 return photosindex;
98、 set
99、; if (index < 0 | index >= photos.Length)
100、0; Console.WriteLine("索引無效");
101、160; return;
102、0; photosindex = value; public Photo thisstring title get
103、 / 遍歷數(shù)組中的所有照片 foreach (Photo p in photos)
104、 / 將照片中的標(biāo)題與索引器參數(shù)進(jìn)行比較
105、60; if (p.Title = title) return p;
106、160; Console.WriteLine("未找到"); / 使用 null 指示失敗
107、0; return null; class TestIndexer static void Main(string args)
108、 / 創(chuàng)建一個(gè)容量為 3 的相冊(cè) Album friends = new Album(3); / 創(chuàng)建 3 張照片 Photo first = new Photo("Jenn");
109、160; Photo second = new Photo("Smith"); Photo third = new Photo("Mark"); / 向相冊(cè)加載照片 friends0 = first; friends1 = second; friends2 = third; / 按索引檢索
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 內(nèi)科醫(yī)患溝通技巧
- 開顱鉆顱術(shù)后引流管的護(hù)理
- 營銷策略流程圖
- 圓錐曲線精美課件
- 風(fēng)險(xiǎn)分散型草牧場(chǎng)托管養(yǎng)殖合同
- 市場(chǎng)營銷策劃與市場(chǎng)戰(zhàn)略制定專員勞動(dòng)合同
- 知識(shí)產(chǎn)權(quán)評(píng)估與財(cái)務(wù)顧問服務(wù)合作協(xié)議
- 跨國公司車輛收費(fèi)員勞務(wù)派遣協(xié)議書
- 商業(yè)大廈立體停車庫租賃合同
- 親子插畫故事書創(chuàng)作合同
- 湖南省婁底市漣源市2023-2024學(xué)年六年級(jí)下學(xué)期期末數(shù)學(xué)試題
- 應(yīng)征公民政治考核表(含各種附表)
- 婚禮堂改造合同范本
- 2024年湖南省中考地理+生物試卷
- 【企業(yè)分拆上市問題探究文獻(xiàn)綜述5800字】
- 2024屆安徽省合肥市一六八中學(xué)高一數(shù)學(xué)第二學(xué)期期末聯(lián)考模擬試題含解析
- 孕產(chǎn)婦健康管理培訓(xùn)課件
- 高校師德師風(fēng)專題培訓(xùn)課件
- 制造業(yè)中員工的倉庫管理培訓(xùn)
- 砼回彈強(qiáng)度自動(dòng)計(jì)算表
- 果汁飲料加工廠可行性研究方案
評(píng)論
0/150
提交評(píng)論