




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(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ì)象和類(lèi) OOP(Object-Oriented Programming)是一種基于對(duì)編程元素的現(xiàn)實(shí)理解,允許程序員在編程時(shí)即定義數(shù)據(jù)元素,又定義可對(duì)這些數(shù)據(jù)元素進(jìn)行的操作。· 對(duì)象:包含數(shù)據(jù)和操作的實(shí)體,如汽車(chē)、人等。 · 類(lèi):是 C# 中的一種結(jié)構(gòu),用于在程序中模擬現(xiàn)實(shí)生活的事物。 · 定義訪問(wèn)修飾符 class <類(lèi)名> / 類(lèi)的主體
2、160; 如: class Employee / 類(lèi)的主體 · 成員變量 · 語(yǔ)法:訪問(wèn)修飾符 類(lèi)型 成員變量; · 說(shuō)明:訪問(wèn)修飾符主要有以下幾鐘: public:可以被所有類(lèi)訪問(wèn) internal:可以被當(dāng)前程序集訪問(wèn) protected:可被所屬類(lèi)和子類(lèi)訪問(wèn)
3、160; private:只能被所屬類(lèi)訪問(wèn) · 類(lèi)的默認(rèn)訪問(wèn)修飾符為internal,而類(lèi)成員為private。 · protected、public和internal修飾的成員變量采用帕斯卡命名法,私有成員采用駱駝命名法。 · 示例:分析員工類(lèi)Employee中需要包含姓名、性別、職稱(chēng)、薪水等信息,因此可以定義一個(gè)如下所示的類(lèi): class Employee private string _nam
4、e; private char _gender; private string _qualification; private uint _salary; · 若要訪問(wèn)Employee類(lèi)中的屬性,則應(yīng)先創(chuàng)建類(lèi)的實(shí)例或?qū)ο蟆?#160; Emp
5、loyee objEmployee = new Employee(); · 使用點(diǎn)號(hào)訪問(wèn)成員變量 objEmployee._name = “張三" objEmployee._name = 'M' 二、構(gòu)造函數(shù)和析構(gòu)函數(shù)· 構(gòu)造函數(shù) 類(lèi)的一種特殊方法,每次創(chuàng)建類(lèi)的實(shí)例都會(huì)調(diào)用它,
6、其功能是將成員變量的值初始化為某個(gè)默認(rèn)值。 語(yǔ)法: 訪問(wèn)修飾符 類(lèi)名(參數(shù)) / 構(gòu)造函數(shù)的主體
7、; 說(shuō)明: Ø 可以帶參數(shù)Ø 無(wú)返回值Ø 若類(lèi)中沒(méi)有定義構(gòu)造函數(shù),則運(yùn)行庫(kù)將自動(dòng)提供默認(rèn)的無(wú)參的構(gòu)造函數(shù)。示例1:無(wú)參的構(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ù)類(lèi)似,只是在名字前加沙鍋內(nèi)代子號(hào)()。 Ø 語(yǔ)法 類(lèi)名()
17、; / 析構(gòu)函數(shù)的主體 Ø 說(shuō)明 一個(gè)類(lèi)只能有一個(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ì)象的行為,類(lèi)中的方法通常包括在調(diào)用類(lèi)時(shí)要使用的操作語(yǔ)句。· 方法聲明 語(yǔ)法: 訪問(wèn)修飾符 返回類(lèi)型 方法名(參數(shù)列表) &
19、#160; /方法的主體 · 說(shuō)明: 方法不返回值,則返回類(lèi)型為void。若需要,則用return 表達(dá)式帶回返回值。 參數(shù)列表可選。 訪問(wèn)修飾符默認(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ù)有共同的名稱(chēng),例如,我們每個(gè)月都會(huì)有各種需要支付的費(fèi)用,如電話(huà)費(fèi)、手機(jī)費(fèi)、電費(fèi)、煤氣費(fèi)、水費(fèi)等。雖然都叫付費(fèi),但其支付的過(guò)程可能不同,因此,在C#中,可以利用方法重載來(lái)實(shí)現(xiàn)付費(fèi)這一任務(wù)。例如: Class BillPayment
35、 void PayBill(int telephoneNumber) /此方法用于支付固定電話(huà)話(huà)費(fèi) void PayBill(long consume
36、rNumber) /此方法用于支付電費(fèi) void PayBill(long consumerNumber, double amount) &
37、#160; /此方法用于支付移動(dòng)電話(huà)話(huà)費(fèi) 注意,不能根據(jù)返回類(lèi)型來(lái)重載方法。· 基于不同數(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、 基于不同類(lèi)型的參數(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#中通過(guò)屬性特性來(lái)讀取和寫(xiě)入字段,而不直接進(jìn)行讀取和寫(xiě)入,以此來(lái)提供對(duì)字段的進(jìn)一步保護(hù)。用戶(hù)可以象訪問(wèn)字段那樣訪問(wèn)屬性。因此,屬性進(jìn)一步對(duì)類(lèi)的數(shù)據(jù)進(jìn)行了封裝。· 格式: 訪問(wèn)修飾符 數(shù)據(jù)類(lèi)型 屬性名 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; · 屬性類(lèi)型 可讀可寫(xiě)
54、0; 只讀 訪問(wèn)修飾符 數(shù)據(jù)類(lèi)型 屬性名 get ; &
55、#160; 只寫(xiě) 訪問(wèn)修飾符 數(shù)據(jù)類(lèi)型 屬性名 set ; · 靜態(tài)屬性訪問(wèn)修飾符s
56、tatic 數(shù)據(jù)類(lèi)型 屬性名get;set; 該屬性屬于整個(gè)類(lèi),而不是類(lèi)的實(shí)例。 · 綜合示例 class SavingsAccount / 類(lèi)字段用于存儲(chǔ)帳號(hào)、余額和已獲利息 private int _accountNumber;
57、 private double _balance; private double _interestEarned; / 利率是靜態(tài)的,因?yàn)樗袔?hù)獲得的利息相同 private static double _interestRate;
58、60; / 構(gòu)造函數(shù)初始化類(lèi)成員 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("沒(méi)有可用余額"); return _balance;
65、0; /讀寫(xiě)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è)部門(mén)人數(shù)很多,假設(shè)部門(mén)經(jīng)理需要一份員工記錄,或許是用于更新資料,或許只是了解一
83、個(gè)信息,不定義傳統(tǒng)的方法來(lái)設(shè)置職員記錄或其他方法來(lái)獲取職員記錄,而是在類(lèi)中定義一個(gè)索引器,是很有道理的,索引器可以為員工的編號(hào)。索引器是一種特殊的方法,索引器允許使用方括號(hào)進(jìn)行訪問(wèn),而不是常規(guī)的get和set方法調(diào)用。使用索引器,使客戶(hù)端代碼更簡(jiǎn)潔。· 語(yǔ)法 訪問(wèn)修飾符 數(shù)據(jù)類(lèi)型 this數(shù)據(jù)類(lèi)型 標(biāo)識(shí)符 get; set;
84、60; · 說(shuō)明 索引器一般用于類(lèi)的數(shù)組元素 允許按數(shù)組方式來(lái)檢索對(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;索引無(wú)效"); / 使用 null 指示失敗
96、; return null; &
97、#160; / 對(duì)于有效索引,返回請(qǐng)求的照片 return photosindex;
98、 set
99、; if (index < 0 | index >= photos.Length)
100、0; Console.WriteLine("索引無(wú)效");
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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- JG/T 2-2007鋼制板型散熱器
- JG/T 172-2005彈性建筑涂料
- 防水工程分包勞務(wù)合同3篇
- JG/T 137-2007結(jié)構(gòu)用高頻焊接薄壁H型鋼
- 城市房屋租賃合同(集合15篇)-房屋租賃合同2篇
- (合同范本)關(guān)于成立XXX合資公司的合作框架協(xié)議5篇
- 生態(tài)農(nóng)莊創(chuàng)業(yè)計(jì)劃書(shū)模板
- GB/T 5291.2-2022電火花成形機(jī)床精度檢驗(yàn)第2部分:雙立柱機(jī)床(移動(dòng)主軸頭型)
- 精裝修專(zhuān)業(yè)分包承包合同2篇
- 中國(guó)聯(lián)堿項(xiàng)目創(chuàng)業(yè)計(jì)劃書(shū)
- 《飛翔的女武神》課件
- 胎盤(pán)早剝預(yù)案演練腳本
- 中鐵項(xiàng)目XXXX年2月份經(jīng)濟(jì)活動(dòng)分析
- 老年患者術(shù)前評(píng)估中國(guó)專(zhuān)家建議
- 朗文定義詞匯表中英對(duì)照
- 2022年學(xué)??照{(diào)使用管理制度
- 抗震支架設(shè)計(jì)流程
- 蘇軾《浣溪沙》優(yōu)秀課件
- 塑料包裝袋購(gòu)銷(xiāo)合同
- 生產(chǎn)良率系統(tǒng)統(tǒng)計(jì)表
- 代理機(jī)構(gòu)服務(wù)質(zhì)量考核評(píng)價(jià)表
評(píng)論
0/150
提交評(píng)論