面向?qū)ο蠡A(chǔ)_第1頁
面向?qū)ο蠡A(chǔ)_第2頁
面向?qū)ο蠡A(chǔ)_第3頁
面向?qū)ο蠡A(chǔ)_第4頁
面向?qū)ο蠡A(chǔ)_第5頁
已閱讀5頁,還剩79頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、ZJWCHCC#面向?qū)ο笤O(shè)計基礎(chǔ)面向?qū)ο笤O(shè)計基礎(chǔ)第三章第三章2第第3章章 C#面向?qū)ο笤O(shè)計基礎(chǔ)面向?qū)ο笤O(shè)計基礎(chǔ)3.1 面向?qū)ο蟮乃枷朊嫦驅(qū)ο蟮乃枷?.2 類和對象類和對象3.3 字段和屬性字段和屬性3.4 類的構(gòu)造函數(shù)和析構(gòu)函數(shù)類的構(gòu)造函數(shù)和析構(gòu)函數(shù)3.5 方法方法3.6 索引器索引器3.1 3.1 面向?qū)ο蟮乃枷朊嫦驅(qū)ο蟮乃枷雞面向過程的程序設(shè)計面向過程的程序設(shè)計(七十年代)(七十年代) 面向過程就是分析出解決問題所需要的步驟,然后用函數(shù)把這些步驟一步一步實現(xiàn),使用的時候一個一個依次調(diào)用就可以了。 程序的結(jié)構(gòu)規(guī)定為順序、選擇和循環(huán)三種基本結(jié)構(gòu),采取自頂向下、逐步求精的分析和設(shè)計方法,即功能分

2、析方法。u面向?qū)ο蟮某绦蛟O(shè)計面向?qū)ο蟮某绦蛟O(shè)計(八十年代開始)(八十年代開始) 面向?qū)ο笫前褬?gòu)成問題事物分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。 面向?qū)ο蠹夹g(shù)以對象為基礎(chǔ),將軟件視為是由一群相互關(guān)聯(lián)對象組成的整體,這些對象能理解從其他對象發(fā)出的消息,并以適當?shù)男袨樽鞒鲰憫?,從而實現(xiàn)軟件的整體功能。面向?qū)ο缶幊叹褪侵苯用鎸浖M的客觀世界中的事物,將它們直接映射成軟件的組成對象。3.1 3.1 面向?qū)ο蟮乃枷朊嫦驅(qū)ο蟮乃枷肜缥遄悠?,面向過程的設(shè)計思路就是首先分例如五子棋,面向過程的設(shè)計思路就是首先分析問題的步驟:析問題的步驟:

3、1、開始游戲 2、黑子先走 3、繪制畫面 4、判斷輸贏 5、輪到白子 6、繪制畫面 7、判斷輸贏 8、返回步驟2 9、輸出最后結(jié)果。把上面每個步驟用分別的函數(shù)來實現(xiàn),問題就解決了。43.1 3.1 面向?qū)ο蟮乃枷朊嫦驅(qū)ο蟮乃枷朊嫦驅(qū)ο蟮脑O(shè)計則是從另外的思路來解決問題。整個五子棋可以分為 1、黑白雙方,這兩方的行為是一模一樣的,2、棋盤對象,負責繪制畫面,3、規(guī)則對象,負責判定諸如犯規(guī)、輸贏等。第一類對象(玩家對象)負責接受用戶輸入,并告知第二類對象(棋盤對象)棋子布局的變化,棋盤對象接收到了棋子的i變化就要負責在屏幕上面顯示出這種變化,同時利用第三類對象(規(guī)則系統(tǒng))來對棋局進行判定。563.1

4、 面向?qū)ο蟮乃枷朊嫦驅(qū)ο蟮乃枷?.1.1. 什么是面向?qū)ο?將數(shù)據(jù)及處理這些數(shù)據(jù)的操作都封裝到一個稱為類的數(shù)據(jù)結(jié)構(gòu)中,在程序中使用的是類的實例對象。 對象對象是代碼與數(shù)據(jù)的集合,是封裝好的一個整體。對象具有一定的功能,也就是說對象是具有一定功能的程序?qū)嶓w。 程序程序是由一個個對象構(gòu)成的,對象之間通過一定的“相互操作”傳遞消息,在消息的作用下,完成特定的功能。 73.1 面向?qū)ο蟮乃枷朊嫦驅(qū)ο蟮乃枷?號水箱號水箱對象對象1號加水器號加水器對象對象2號水箱號水箱對象對象2號加水器號加水器對象對象3號水箱號水箱對象對象3號加水器號加水器對象對象什么是面向?qū)ο螅繛槭裁葱枰嫦驅(qū)ο竽??要解決這些問題,我

5、們首先看一個簡單的例子。83.1 面向?qū)ο蟮乃枷朊嫦驅(qū)ο蟮乃枷朊嫦驅(qū)ο笏枷肴绱丝紤]: 場景中所有角色抽象起來總共有兩類:加水器和水箱場景中所有角色抽象起來總共有兩類:加水器和水箱水箱空,觸發(fā)加水器加水水箱空,觸發(fā)加水器加水 水箱的體積決定加水器加多少水水箱的體積決定加水器加多少水將加水器和水箱具體化成將加水器和水箱具體化成1號、號、2號、號、3號裝置號裝置 加水器類加水器類水箱類水箱類加水方法加水方法“水箱空水箱空”事件事件放水方法放水方法93.1 面向?qū)ο蟮乃枷朊嫦驅(qū)ο蟮乃枷?.1.2. 面向?qū)ο蟪绦蛟O(shè)計語言的三個特性面向?qū)ο蟪绦蛟O(shè)計語言的三個特性封裝:封裝:就是用一個框架把數(shù)據(jù)和代碼組合在

6、一起,形成一個對象,對象是封裝的基本單元。繼承:繼承:是面向?qū)ο缶幊碳夹g(shù)的一塊基石,通過它可以創(chuàng)建分級層次的類。繼承是父類和子類之間共享數(shù)據(jù)和方法的機制,通常把父類稱為基類,子類稱為派生類。多態(tài)性:同一個消息或操作作用于不同的對象,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結(jié)果。103.1 面向?qū)ο蟮乃枷朊嫦驅(qū)ο蟮乃枷?.1.3. 面向?qū)ο蟪绦蛟O(shè)計的基本概念面向?qū)ο蟪绦蛟O(shè)計的基本概念類和對象屬性、方法與事件封裝繼承重載多態(tài)性113.2 類和對象類和對象通常把具有同樣性質(zhì)和功能的東西所構(gòu)成的集通常把具有同樣性質(zhì)和功能的東西所構(gòu)成的集合叫做合叫做類(class)。)。123.2 類和對象類和對象-類類類的聲

7、明:類是類的聲明:類是 C# 中的一種結(jié)構(gòu),用于在程序中的一種結(jié)構(gòu),用于在程序中模擬現(xiàn)實生活的事物中模擬現(xiàn)實生活的事物語法:訪問修飾符 class / 類的主體示例:class Student / 類的主體/ 成員變量/ 成員方法133.2 類和對象類和對象1)類修飾符)類修飾符修飾符修飾符作用說明作用說明public公有類,表示外界可以不受限制的訪問該類公有類,表示外界可以不受限制的訪問該類protected保護類,表示該類只能被這個類的成員或派生類成員保護類,表示該類只能被這個類的成員或派生類成員訪問訪問internal表示該類能夠由程序集中的所有文件使用,而不能由表示該類能夠由程序集中的

8、所有文件使用,而不能由程序集以外的對象使用程序集以外的對象使用private該類只能被這個類的成員訪問該類只能被這個類的成員訪問abstract抽象類,該類含有抽象成員,因此不能被實例化,只抽象類,該類含有抽象成員,因此不能被實例化,只能作為基類能作為基類sealed密封類,不能從這個類再派生出其他類密封類,不能從這個類再派生出其他類143.2 類和對象類和對象2)如果缺省類修飾符,默認為)如果缺省類修飾符,默認為private。3)“成員定義列表成員定義列表”聲明該類包含的成員,類成員聲明聲明該類包含的成員,類成員聲明主要包括:常數(shù)、字段、方法、屬性、事件、索引器、主要包括:常數(shù)、字段、方法

9、、屬性、事件、索引器、運算符、構(gòu)造函數(shù)、析構(gòu)函數(shù)等。運算符、構(gòu)造函數(shù)、析構(gòu)函數(shù)等。153.2 類和對象類和對象屬性型號價格里程行為起動停車行駛屬性車輪數(shù)量檔的數(shù)量行為加速換檔剎車屬性名稱顏色品種行為搖尾巴吃東西犬 吠 類的示例類的示例收銀員類顧客類顧客姓名:年齡:體重:操作:購買商品屬性屬性姓名:職銜:年齡:體重:操作:收款打印帳單行為行為173.2 對對 象象對象對象相當于現(xiàn)實世界中的實體在指定一個類后,往往把屬于這個類的對象對象稱為類的實例實例,可以把類看成是對象的模板,把對象看成是類的實例。比如:人和張三;比如:人和張三;int和和1018對象的聲明對象的聲明【格式格式】: 類名 實例名

10、=new 類名(參數(shù));【功能功能】:生成一個由“類名”指定的類的名為“實例名”的實例,如果有參數(shù)則將參數(shù)傳遞給構(gòu)造函數(shù)。【說明說明】: 1)new關(guān)鍵字實際上是調(diào)用構(gòu)造函數(shù)來完成實例的初始化工作。192)創(chuàng)建實例也可以分為兩步:先定義實例變量,然后用new關(guān)鍵字創(chuàng)建實例。 類名 實例名; /定義類的實例變量 實例名=new 類名(參數(shù));/創(chuàng)建類的實例。 Student Stu1=new Student(); /定義并生成定義并生成Student類的實例類的實例Stu1。等價于: Student Stu1; Stu1=new Student();對象的示例對象的示例收銀員對象顧客對象顧客姓名

11、:朱麗葉年齡:28體重:52千克操作:購買商品屬性屬性姓名:布蘭尼職銜:收銀員年齡:35體重:60千克操作:收款打印帳單行為行為21語法:語法:3.2 類和對象類和對象-成員變量成員變量訪問修飾符訪問修飾符數(shù)據(jù)類型數(shù)據(jù)類型成員變量成員變量;privateprotectedinternalpublic_namestatus.userNameintchar.bool class Student public string name;public char gender;private string class;private uint grade; 訪問成員變量步驟 1:創(chuàng)建一個類的對象Stude

12、nt obj = new Student();步驟 2:使用點號訪問成員變量 = “張三; = M;22訪問修飾符訪問修飾符 -封裝封裝Teacher 類private 成員protected 成員public 成員internal 成員Student 類只有 Student 類在 Teacher 類都在同一程序集中,才可訪問internal成員不可訪問不可訪問可以訪問23訪問修飾符訪問修飾符 2-2修飾符修飾符說明說明public所屬類的成員以及非所屬類的成員都可以訪問所屬類的成員以及非所屬類的成員都可以訪問internal當前程序集可以訪問當前程序集可以訪問

13、private只有只有所屬類的成員所屬類的成員才能才能訪問訪問protected所屬類或派生自所屬類的類型可以訪問所屬類或派生自所屬類的類型可以訪問24字段字段1、字段、字段又稱域又稱域,它是類的一個成員,這個成,它是類的一個成員,這個成員代表與對象或類相關(guān)的變量。實際上員代表與對象或類相關(guān)的變量。實際上字段字段就就相當于相當于C+類中的一種簡單成員變量,而在類中的一種簡單成員變量,而在C#中換了名字罷了。中換了名字罷了?!靖袷礁袷健浚?字段字段修飾符修飾符 字段字段類名類名 字段字段名;名;25【說明】:1)修飾符有:public, protected, internal, private,

14、 readonly等。2)在域定義時如果加上了readonly修飾符表明該域為只讀域。只讀域只能在域定義中及域所屬類的構(gòu)造函數(shù)中進行賦值,在其他情況下均不能改變只讀域的值。26class box public double high; public double width; public readonly double weight = 5;class boxTest public static void Main() box B1 = new box(); B1. high=10; B1. width=20; Console.WriteLine(High=0,Width=1,Weight=

15、2, B1.high,B1.width,B1.weight); B1.weight = B1.weight + 5; 27屬性簡介屬性簡介 class Studentprivate static string _name; /姓名private static string _id; /學生idstatic void Main(string args)_name = Console.ReadLine();_id = Console.ReadLine(); 直接訪問字段 不經(jīng)驗證 28屬性簡介屬性簡介class Student private static string _name; privat

16、e static string _id; public void SetId(value) / 驗證輸入長度小于 2if (_id.Length 2)_id = value; public string GetId() return _id; 方法 SetId(Value) 和 GetId() 分別讀取和寫入學生 ID Student s; s.SetId(A1); string StudentId= s.GetId() 每次都調(diào)用 GetId() 和 SetId()方法會很繁瑣屬性29屬性簡介屬性簡介class Student private string _name; private st

17、ring _id; public string Id get return _id; set/ 驗證輸入長度小于 2if (_id.Length 2)_id = value; 讀取 ID 時調(diào)用 將值賦給 ID 時調(diào)用 30屬性類型屬性類型 訪問修飾符 數(shù)據(jù)類型 屬性名 get ; set ; 讀/寫屬性可以賦值和檢索值31屬性類型屬性類型訪問修飾符 數(shù)據(jù)類型 屬性名get ;只讀屬性只能檢索值32屬性類型屬性類型訪問修飾符 數(shù)據(jù)類型 屬性名set ;只寫屬性只能賦值33Class Accountprivate int _accountNo; /帳號private double _balanc

18、e; /余額private double _interest; /利息private double _interestRate; / 利率/ 構(gòu)造函數(shù)初始化類成員public Account(int No, double bal)_accountNo = No;_balance = bal;/ 只讀 AccountNumber 屬性public int AccountNumbergetreturn _accountNo;演示定義和調(diào)用屬性定義和調(diào)用屬性只讀屬性 34public double InterestEarnedgetreturn _interest;set/ 驗證數(shù)據(jù)if (valu

19、e 0.0)Console.WriteLine(“利息不能為負數(shù));return;_interest = value;35public static double InterestRategetreturn _interestRate;set/ 驗證數(shù)據(jù)if (value 0.0)Console.WriteLine(“利率不能為負數(shù));return;else_interestRate = value / 100;36public double Balancegetif (_balance 0)Console.WriteLine(沒有可用余額);return _balance;37定義和調(diào)用屬性

20、定義和調(diào)用屬性static void Main(string args)/ 創(chuàng)建 Account 的對象Account objAccount = new Account(5000, 2500);Console.WriteLine(輸入到現(xiàn)在為止已獲得的利息和利率);objAccount. InterestEarned = Int64.Parse(Console.ReadLine();Account.InterestRate = Int64.Parse(Console.ReadLine();objAccount.InterestEarned += objAccount.Balance * Acc

21、ount.InterestRate;Console.WriteLine(獲得的總利息為: 0, objAccount.InterestEarned);public double InterestEarnedgetreturn _interest;set/ 驗證數(shù)據(jù)if (value 0.0)Console.WriteLine(“利息不能為負數(shù));return;_interest = value;將設(shè)置 InterestEarned 屬性38定義和調(diào)用屬性定義和調(diào)用屬性static void Main(string args)/ 創(chuàng)建 Account 的對象Account objAccount

22、=new Account(5000, 2500);Console.WriteLine(輸入到現(xiàn)在為止已獲得的利息和利率);objAccount.InterestEarned = Int64.Parse(Console.ReadLine();Account.InterestRate = Int64.Parse(Console.ReadLine();objAccount.InterestEarned += objAccount.Balance * Account.InterestRate;Console.WriteLine(獲得的總利息為: 0, objAccount.InterestEarned

23、);將設(shè)置 InterestRate 屬性public static double InterestRategetreturn _interestRate;set/ 驗證數(shù)據(jù)if (value 0.0)Console.WriteLine(“利率不能為負數(shù));return;else_interestRate = value / 100;39定義和調(diào)用屬性定義和調(diào)用屬性static void Main(string args)/ 創(chuàng)建 Account 的對象Account objAccount = new Account(5000, 2500);Console.WriteLine(“輸入到現(xiàn)在為止

24、已獲得的利息和利率);objAccount.InterestEarned = Int64.Parse(Console.ReadLine();Account.InterestRate = Int64.Parse(Console.ReadLine();objAccount.InterestEarned += objAccount.Balance * objAccount.InterestRate;Console.WriteLine(獲得的總利息為: 0, objAccount.InterestEarned);將檢索 Balance 和 InterestRate 屬性public double Ba

25、lancegetif (_balance 0)Console.WriteLine(沒有可用余額);return _balance;40類的靜態(tài)成員和實例成員 靜態(tài)成員:靜態(tài)成員:有static,屬于類所有,只能通過類名來訪問。 實例成員:實例成員:沒有static,屬于類的實例所有,又稱實例成員,只能通過類的實例對象來訪問。需要說明的幾點:1)靜態(tài)成員就像一個全局變量,可以在不同的方法、不同的類中被使用。2)static既可以修飾字段,也可以修飾屬性和方法。3)static方法中不能直接調(diào)用非static成員,而非static方法既可以調(diào)用非static成員,又能調(diào)用static成員。4142

26、using System;class Example1 static public int a; public int b; void Meth1() a = 10; b = 20; static void Meth2() a = 30; b=40; 靜態(tài)成員實例成員實例方法實例方法中可以訪問本類的靜態(tài)成員實例方法中可以訪問本類的實例成員靜態(tài)方法能夠訪問本類的靜態(tài)成員靜態(tài)方法不能訪問本類的實例成員靜態(tài)方法43public static void Main() Example1 E1 = new Example1(); Example1 E2 = new Example1(); E1.Meth1

27、(); E1.Meth2(); Console.WriteLine(a=0,b=1,Example1.a,E1.b); E2.a=50; Example1.a = Example1.a + 50; E2.b = Example1.a + 60; Console.WriteLine(a=0,b=1, Example1.a, E2.b); 產(chǎn)生類的實例E1產(chǎn)生類的實例E2調(diào)用非靜態(tài)方法需使用類的實例此語句出現(xiàn)錯誤,因為靜態(tài)方法只能由類來調(diào)用此語句出現(xiàn)錯誤,因為靜態(tài)變量只能由類來調(diào)用靜態(tài)類靜態(tài)類靜態(tài)類:不能被實例化靜態(tài)類:不能被實例化(new)的類。的類。 static class ConsoleH

28、elper public static int ReadInt() string str = Console.ReadLine(); return Convert.ToInt32(str); 靜態(tài)類的用途:一般用來實現(xiàn)一些函數(shù)庫。靜態(tài)類的用途:一般用來實現(xiàn)一些函數(shù)庫。44453.3.1構(gòu)造函數(shù)構(gòu)造函數(shù) 構(gòu)造函數(shù)構(gòu)造函數(shù):類的一種特殊方法,每次創(chuàng)建類的實例都會調(diào)用它,用來創(chuàng)建對象。主要用來為對象分配存儲空間,完成初始化操作(給類的成員變量賦值等)。定義類的構(gòu)造函數(shù)有如下規(guī)則:定義類的構(gòu)造函數(shù)有如下規(guī)則:1)構(gòu)造函數(shù)的函數(shù)名和類的名稱一樣。2)當某個類沒有構(gòu)造函數(shù)時,系統(tǒng)將自動為其創(chuàng)建構(gòu)造函數(shù),這

29、種構(gòu)造函數(shù)稱為默認構(gòu)造函數(shù)。4)構(gòu)造函數(shù)由于不需要顯示調(diào)用,因而不用聲明返回類型。5)構(gòu)造函數(shù)可以帶參數(shù)也可以不帶參數(shù)。463.3.1構(gòu)造函數(shù)構(gòu)造函數(shù) 構(gòu)造函數(shù)是類的一種特殊方法,每次創(chuàng)建類的實構(gòu)造函數(shù)是類的一種特殊方法,每次創(chuàng)建類的實例都會調(diào)用它。例都會調(diào)用它。訪問修飾符() / 構(gòu)造函數(shù)的主體語法:語法:/ 構(gòu)造函數(shù)Student()class = “信管;示例:47演示:示例 13.3.1構(gòu)造函數(shù)構(gòu)造函數(shù) class Student private string name; private char gender; private string class; private uint g

30、rade; / 構(gòu)造函數(shù) private Student() class = “信管; static void Main(string args) / 調(diào)用默認構(gòu)造函數(shù) Student obj = new Student(); Console.WriteLine(“班級= + obj.class); Console.WriteLine(“成績= + obj.grade); 4.1參數(shù)化構(gòu)造函數(shù)參數(shù)化構(gòu)造函數(shù) 訪問修飾符訪問修飾符 / 構(gòu)造函數(shù)的主體構(gòu)造函數(shù)的主體語法語法:(參數(shù)列表參數(shù)列表)/ 參數(shù)化構(gòu)造函數(shù)Student(string strclass) class = s

31、trclass;示例:493.3.1參數(shù)化構(gòu)造函數(shù)參數(shù)化構(gòu)造函數(shù) / 默認構(gòu)造函數(shù)private Student() class = “信管;/ 參數(shù)化構(gòu)造函數(shù)private Student(string strclass, string strName, char gender, uint grade) class = strclass; name = strName; gender = gender; grade = grade; public static void Main(string args) / 調(diào)用默認構(gòu)造函數(shù) Student obj = new Student(); / 調(diào)

32、用參數(shù)化構(gòu)造函數(shù) Student obj1 = new Student(“信管08“, ”張亮亮“, 男, 98); Console.WriteLine(“默認構(gòu)造函數(shù)輸出: n班級=“ + obj.class); Console.WriteLine(“n參數(shù)化構(gòu)造函數(shù)輸出: n班級= +obj1.class);503.3.2析構(gòu)函數(shù)析構(gòu)函數(shù)析構(gòu)函數(shù)在對象銷毀時被調(diào)用,常用來釋放對象占用的存析構(gòu)函數(shù)在對象銷毀時被調(diào)用,常用來釋放對象占用的存儲空間儲空間() / 析構(gòu)函數(shù)的主體 語法語法: Student()示例:1)析構(gòu)函數(shù)不能帶有參數(shù))析構(gòu)函數(shù)不能帶有參數(shù)2)析構(gòu)函數(shù)不能擁有訪問修飾符)析構(gòu)

33、函數(shù)不能擁有訪問修飾符3)不能顯示地調(diào)用析構(gòu)函數(shù))不能顯示地調(diào)用析構(gòu)函數(shù)4)析構(gòu)函數(shù)的命名規(guī)則是在類名前加上一個)析構(gòu)函數(shù)的命名規(guī)則是在類名前加上一個“”。5)析構(gòu)函數(shù)在對象銷毀時自動調(diào)用)析構(gòu)函數(shù)在對象銷毀時自動調(diào)用51523.4方法方法對象的行為接聽響鈴掛斷PickUp()./用于傳送和接收信號的代碼Ring()./用于顯示主叫號碼的代碼Hang()./用于結(jié)束會話的代碼533.4.1聲明方法聲明方法語法訪問修飾符(可選),默認情況下為 private訪問修飾符 返回類型 (參數(shù)列表)/ 方法主體如果不需要返回任何值,方法可能返回 void 數(shù)據(jù)類型方法頭不是一條語句,其后不能跟分號“;”

34、“形式參數(shù)說明列表”是一個由逗號分隔開的列表54聲明方法聲明方法 2-2.class Pointint x;int y;void Assign()System.Console.WriteLine(“輸入點的x和y坐標);x = int.Parse(System.Console.ReadLine();y = int.Parse(System.Console.ReadLine();.方法 Assign() 的定義 不返回任何值 (void) 不接收任何值 (Assign()Assign( ) 方法553.4.2調(diào)用方法調(diào)用方法 語法方法名(參數(shù)列表);對象名.方法名(參數(shù)列表);類名.方法名(實際

35、參數(shù)類表)實例類中的方法點號格式三只能調(diào)用非本類的另一個類的靜態(tài)方法。563.4.2調(diào)用方法調(diào)用方法 【說明】:1)調(diào)用方法時,如果方法有形式參數(shù),在調(diào)用時應在“()”中使用實際參數(shù)。2)如果方法是沒有返回值的方法,方法的調(diào)用只能作為一條語句;如果方法有返回值,方法的調(diào)用相當于一個同類型的數(shù)據(jù),可以作為表達式或表達式的一部分參與運算。3)在形式上可以這樣理解形式參數(shù)和實際參數(shù):定義方法時使用的參數(shù)是形式參數(shù),調(diào)用方法時使用的參數(shù)是實際參數(shù)。57演示:示例 3調(diào)用方法調(diào)用方法 3-2public void Create() Console.WriteLine(“請輸入實部:); _real =

36、int.Parse(Console.ReadLine(); Console.WriteLine(“請輸入虛部:); _imaginary = int.Parse(Console.ReadLine();public void PrintResult() Console.WriteLine(“兩復數(shù)相加之和為:); Console.WriteLine(_real + + + _imaginary + i);/ 此方法用于將兩個復數(shù)相加public ComplexNumber ComplexAdd(ComplexNumber Param1) Param1._real += _real ; Param

37、1._imaginary += _imaginary; return Param1;接收實部和虛部的值顯示實部和虛部的值請參閱對象的實例變量Param1 與 Number2 相關(guān)聯(lián)STAThreadpublic static void Main(string args) ComplexNumber Number1 = new ComplexNumber(); ComplexNumber Number2 = new ComplexNumber(); Number1.Create(); Number2.Create(); ComplexNumber Temp = Number1.ComplexAd

38、d(Number2); Temp.PrintResult();583.4.2調(diào)用方法調(diào)用方法 語法return 表達式;return 語句 593.4.3參數(shù)的傳遞參數(shù)的傳遞 所謂參數(shù)傳遞時指實參把數(shù)據(jù)傳給形參的方式,C#中的參數(shù)傳遞可分為4種:值傳遞、引用傳值傳遞、引用傳遞、輸出參數(shù)和參數(shù)數(shù)組。遞、輸出參數(shù)和參數(shù)數(shù)組。1)值傳遞)值傳遞u使用“值傳遞”的方法來傳遞參數(shù)時,實參把值復制一份傳給形參,形參接受了實參的值后與實參已不再存在任何聯(lián)系。u在方法中對形參的修改不會影響到對應的實參,這種傳遞方式又稱為單向傳遞。603.4.3參數(shù)的傳遞參數(shù)的傳遞using System;class exam

39、ple static void exch(int a, int b) int t; t = a; a = b; b = t; public static void Main() int x, y; Console.WriteLine(請輸入請輸入x和和y的值:的值:); x = Convert.ToInt32(Console.ReadLine(); y = Convert.ToInt32(Console.ReadLine(); exch(x, y); Console.WriteLine(轉(zhuǎn)化后的轉(zhuǎn)化后的x和和y的值:的值:0,1, x, y); 613.4.3參數(shù)的傳遞參數(shù)的傳遞沒有改變的原因

40、是沒有改變的原因是“值傳遞值傳遞”。35xy35abexch35xy53abexch(a)函數(shù)調(diào)用時的參數(shù)傳遞函數(shù)調(diào)用時的參數(shù)傳遞(b)改變形參的值不會影響實參改變形參的值不會影響實參可見實參把值傳遞給形參后,實參和形參之間不再存在聯(lián)系,可見實參把值傳遞給形參后,實參和形參之間不再存在聯(lián)系,對形參的修改不會影響到對應的實參值。對形參的修改不會影響到對應的實參值。623.4.3參數(shù)的傳遞參數(shù)的傳遞2)引用傳遞)引用傳遞u和值參數(shù)不同,引用型參數(shù)并不開辟新的內(nèi)存區(qū)域,而是向方法傳遞實參在內(nèi)存中的地址。u在C#中要通過引用方式傳遞數(shù)據(jù),需要使用關(guān)鍵字ref。u使用方法是在定義方法時,在按引用傳遞的形

41、式參數(shù)的類型說明符前加上關(guān)鍵字ref,在調(diào)用方法時,在按引用傳遞的實際參數(shù)之前加上關(guān)鍵字ref。633.4.3參數(shù)的傳遞參數(shù)的傳遞class example static void exch( ref int a, ref int b) int t; t = a; a = b; b = t; public static void Main() int x, y; Console.WriteLine(請輸入x和y的值:); x = Convert.ToInt32(Console.ReadLine(); y = Convert.ToInt32(Console.ReadLine(); exch(re

42、f x,ref y); Console.WriteLine(轉(zhuǎn)化后的x和y的值:0,1, x, y); 643.4.3參數(shù)的傳遞參數(shù)的傳遞3)輸出型參數(shù)uC#提供了一種特殊的參數(shù)傳遞方式,僅用于從方法傳遞回一個結(jié)果。完成這種數(shù)據(jù)傳遞方式的輸出型參數(shù),用關(guān)鍵字out表示。u與引用型參數(shù)的參數(shù)類似,輸出型參數(shù)也不開辟新的內(nèi)存區(qū)域。它與引用參數(shù)的區(qū)別:調(diào)用方法前無須對變量進行初始化。u在將實參作為輸出型參數(shù)傳遞的調(diào)用完成后,該實參變量將會被該方法中的形參明確賦值,并將數(shù)據(jù)從方法中傳出至調(diào)用處。uOut修飾符后應跟隨形參類型相同的類型聲明。653.4.3參數(shù)的傳遞參數(shù)的傳遞using System;p

43、ublic class Calculate public void Cal(int inNum, out int outNum) outNum = inNum * inNum; class CalAPP public static void Main() Calculate cal = new Calculate(); int outnum;/不必初始化 cal.Cal(35, out outnum); Console.WriteLine(outnum); 663.4.3參數(shù)的傳遞參數(shù)的傳遞4)參數(shù)數(shù)組形參數(shù)組前如果用params修飾符進行聲明就是參數(shù)數(shù)組,通過參數(shù)數(shù)組可以向函數(shù)傳遞個數(shù)變化的

44、參數(shù)。l若形參表中含一個參數(shù)數(shù)組,則該參數(shù)數(shù)組必須位于形參列表的最后。l參數(shù)數(shù)組必須是一維數(shù)組。l不允許將params修飾符與ref和out修飾符組合起來使用。l與參數(shù)數(shù)組對應的實參可以是同一類型的數(shù)組名,也可以是任意多個與該數(shù)組的元素屬于同一類型的變量。l若實參是數(shù)組則按引用傳遞,若實參是變量或表達式則按值傳遞。673.4.3參數(shù)的傳遞參數(shù)的傳遞static int ParamsMeth(ref int sum, params int arr) int i; for (i = 0; i arr.Length; i+) sum = sum + arri; arri = arri * arri;

45、 return (arrarr.Length - 1); 683.4.3參數(shù)的傳遞參數(shù)的傳遞static void Main() int a = 1, 2, 3 ; int i, l1,l2; int s = 0; l1=ParamsMeth(ref s, a); Console.WriteLine(和為0, s); for (i = 0; i a.Length; i+) Console.WriteLine(a0=1, i, ai); l2=ParamsMeth(ref s, 23, 45); Console.WriteLine(和為:0,1, s,l2); 693.4.4靜態(tài)方法和非靜態(tài)方法

46、靜態(tài)方法和非靜態(tài)方法C#中類定義可以包含兩種方法:靜態(tài)和非靜態(tài)。中類定義可以包含兩種方法:靜態(tài)和非靜態(tài)。定義靜態(tài)時用定義靜態(tài)時用static修飾,定義一個靜態(tài)方法時,修飾,定義一個靜態(tài)方法時,使用時需注意如下兩點:使用時需注意如下兩點:1)靜態(tài)方法屬于類所有,非靜態(tài)方法屬于類定義的對象所有 ,又稱實例方法。2)非靜態(tài)方法可以訪問類中包括靜態(tài)成員在內(nèi)的所有成員,而靜態(tài)方法只能訪問類中的靜態(tài)成員。703.4.5方法重載方法重載u重載是面向?qū)ο蟮囊粋€重要特征,通過重載可以使多個具有相同功能但是參數(shù)不同的方法共享同一個方法名。u方法重載的格式是在一個類中兩次或多次定義同名的方法,這些同名的方法包括從基

47、類繼承而來的方法,名稱相同,但每個方法的參數(shù)類型或個數(shù)不同,從而便于在用戶調(diào)用方法時系統(tǒng)能夠自動識別應調(diào)用的方法。713.4.5方法重載方法重載 Class Paymentvoid PayBill(int telephoneNumber)/此方法用于支付固定電話話費void PayBill(long consumerNumber)/此方法用于支付電費void PayBill(long consumerNumber, double amount)/此方法用于支付移動電話話費對不同數(shù)據(jù)執(zhí)行相似的功能723.4.5方法重載方法重載int smallest(int num1, int num2) Co

48、nsole.WriteLine(“0 和 1 相比, 最小的是: , num1, num2); if(num1 num2) return num1; else return num2; int smallest(int num1, int num2, int num3) Console.WriteLine(“0, 1 和 2 相比, 最小的是: , num1, num2, num3); if(num1 num2 & num1 num3) return num1; else if(num2 num1 & num2 num3) return num2; else return nu

49、m3; 具有不同數(shù)量的參數(shù)的方法重載733.4.5方法重載方法重載 int smallest(int numbers)int min = numbers0;for(int i = 1;i numbersi)min = numbersi;return min;double smallest(double numbers) double min = numbers0;for(int i = 1;i numbersi) min = numbersi;return min;具有不同類型的參數(shù)的方法重載class OverTest public double area(double r)/求圓的面積,只

50、有一個參數(shù) return (Math.PI * r * r); public double area(double a, double b)/求矩形面積,有兩個參數(shù) return (a * b); public double area(double a, double b, double c)/求三角形面積,有三個參數(shù) double i, s; i = (a + b + c) / 2; s = Math.Sqrt(i * (i - a) * (i - b) * (i - c); return (s); class Exam public static void Main() OverTest

51、shape = new OverTest();/定義類的實例 Console.WriteLine(R is0,Area is 1, 3.0, shape.area(3.0); Console.WriteLine(A is 0,B is1,Area is2, 3.0, 4.0, shape.area(3.0, 4.0); Console.WriteLine(“A is 0,B is1,C is2,Area is3”, 3.0, 4.0,5.0, shape.area(3.0, 4.0,5.0); 76運算符重載運算符重載運算符也是運算符也是C#類的一個重要成員,系統(tǒng)對大類的一個重要成員,系統(tǒng)對大部分運算符都給出了常規(guī)定義,這些定義大部部分運算符都給出了常規(guī)定義,這些定義大部分和現(xiàn)實生活中這些運算符的意義相同。分和現(xiàn)實生活中這些運算符的意義相同。但可以根據(jù)需要給這些運算符賦予一個新的含但可以根據(jù)需要給這些運算符賦予

溫馨提示

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

評論

0/150

提交評論