《面向?qū)ο蟪绦蛘Z言設(shè)計5用對象思考:屬性和方法.ppt》由會員分享,可在線閱讀,更多相關(guān)《面向?qū)ο蟪绦蛘Z言設(shè)計5用對象思考:屬性和方法.ppt(30頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第二章,用對象思考:屬性和方法,理解類與對象的概念 理解屬性和方法的概念 能夠定義一個簡單的類,本章目標(biāo),對象,對象是人們要進(jìn)行研究的任何事物,描述汽車的特征和行為,有各自不同的狀態(tài),類和對象,小汽車,類的實例化,是由類具體化對象,類,,產(chǎn)地,車體顏色,行駛,剎車,,,,歸納一組相似對象的共性,對象,屬性,方法,類描述一組相似對象的共性,類和對象的應(yīng)用,類和對象的簡單應(yīng)用,// Car ferrari = New Car(); ferrari.Run(); //,類,對象,,,實例化對象,調(diào)用方法,public class Student int age = 26; // 姓名 p
2、rivate string name; public string Name get return name; set name = value; //問候 public void SayHi() ,類和類的成員,類的成員,字段,屬性,方法,,,,,,,,類名,自定義一個類,自定義類DBHelper,class DBHelper // 數(shù)據(jù)庫連接字符串 private static string connString = ; // 數(shù)據(jù)庫連接 Connection 對象 public static SqlConnection conne
3、ction = new SqlConnection(connString); ,,,訪問修飾符,私有,公有,公有成員和私有成員,class student private string name;//姓名 public int age; //年齡 public string idNumber ;//身份證號 static void Main(string args) student myStudent = new student(); myStudent.name = 張三; myStudent.age = 20; ,私有成員,公有成員,實例化一個對象,,可以訪問
4、,演示示例1:訪問修飾符,無法訪問編譯錯誤,數(shù)據(jù)安全,static void Main(string args) student myStudent = new student(); myStudent.age = -2; myStudent.idNumber = 123456; ,非法數(shù)據(jù),身份證號不能被修改,無法獲得數(shù)據(jù),無法正常賦值,有時候?qū)㈩愔械淖侄喂_是不安全的,如果設(shè)為私有成員,能否對這些字段進(jìn)行規(guī)則約束或者只讀呢?,,,在類中使用屬性,private int age; //年齡 public int Age get return age; set if
5、(value 0 ,myStudent.Age = -20; //打印 myStudent.Age = 40; //打印,沒有訪問age,公開Age,錄入非法數(shù)據(jù),打印私有變量age,演示示例2: MyAttribute,不公開age,通過公有Age訪問和約束私有字段age,什么是屬性,C#不直接訪問類的數(shù)據(jù) 通過訪問器訪問(get,set),class Student // 姓名 private string name; public string Name get return name; set name = value; ,返回name
6、,,get用于獲取相應(yīng)字段的值,set用于設(shè)置字段的值,只有g(shù)et時:只讀屬性,只有set時:只寫屬性,get和set都存在:讀寫屬性,屬性的類型和字段類型必須一致。,給name賦值,屬性的特點(diǎn),private int age; //年齡 public int Age get return age; set if (value 0 ,,控制私有字段的可訪問性,保護(hù)內(nèi)部數(shù)據(jù)的安全,,建議類內(nèi)部敏感字段使用 屬性來控制訪問,,類型可以是各種數(shù)據(jù)類型,如:對象、數(shù)組等等,封裝字段,將類中的字段、屬性綁到一起,封裝字段,封裝是面向?qū)ο蟮娜筇匦灾?避免非法數(shù)據(jù)的訪問,保
7、證數(shù)據(jù)的完整性,演示: 在VS中使用重構(gòu)封裝字段,小結(jié),編寫MySchool中的Student類 包含的屬性 年齡(0-100)不符合的設(shè)為18 姓名(只讀屬性) 愛好(讀寫) 給屬性賦值并打印出來,在類中使用方法,方法是類或?qū)ο蟮男袨?對象需要做某些事情,在類中添加方法 回顧方法的定義,訪問修飾符 返回類型 方法名 ( 參數(shù)列表 ) // 方法的主體 ,通過return返回值,如果返回類型是void,方法是否需要返回值?,第一學(xué)期我們學(xué)習(xí)了幾種參數(shù)傳遞方式?,方法的參數(shù),回顧:參數(shù)傳遞 使用值傳遞,參數(shù)值的更改不能保留。 使用 ref 可以將參數(shù)值的更改保留 out 類型參數(shù),priva
8、te static void AddScore(ref int score,out int scoreResult) if (score 50 ,都可以輸出結(jié)果,ref側(cè)重修改,out側(cè)重輸出,不能寫成AddScore(out int scoreResult),方法的使用,實現(xiàn)兩個整型的加法,class Add public int Sum(int para1, int para2) return para1 + para2; ,Add myAdd = new Add(); int sum = myAdd.Sum(2, 3);,使用方法,實例化一個對象,返回結(jié)果,演
9、示示例3:方法的使用,調(diào)用方法,靜態(tài)方法,class mySwap public static void Swap(ref int num1,ref int num2) int temp; temp = num1; num1 = num2; num2 = temp; ,class Program static void Main(string args) int num1 = 5, num2 = 10; mySwap.Swap(ref num1, ref num2); ,回顧一下,Swap方法在另一類中如何調(diào)用?,靜態(tài)方法使用類名調(diào)用,靜態(tài)方法,靜態(tài)方法和實
10、例方法,使用static修飾的方法稱為靜態(tài)方法 使用實例對象調(diào)用的方法叫做實例方法,為什么要重載,public int Sum(int para1, int para2) return para1 + para2; ,整形參數(shù),返回值整型,如果想讓兩個string型、兩個double型相加,怎么做?,編寫兩個不同名字的方法,這樣我們在進(jìn)行調(diào)用時 要先判斷是什么類型,能否不判斷直接就能相加呢?,方法的重載,同一個類中添加幾個名字相同,參數(shù)與返回值不同的方法,public string Sum(string para1, string para2) return para1 + par
11、a2; ,public double Sum(double para1, double para2) return para1 + para2; ,調(diào)用時只要傳遞參數(shù)即可,無需判斷類型,演示示例4:方法的重載,class Add public string Sum(string para1, string para2) public int Sum(int para1, int para2) ,重載的方式,基于不同類型參數(shù)的重載,,class Add public int Sum(int para1, int para2) public int Sum(int para1,
12、 int para2,int para3) ,相同類型不同參數(shù)個數(shù)的重載,,不允許重載方法僅僅是返回值不同,演示示例5:構(gòu)造函數(shù),Student zhang = new Student(); zhang.Name = 張靚靚; zhang.Age = 20; zhang.Hobby = 唱歌歌;,一種特別的方法,班級來了新學(xué)員 添加學(xué)員對象,,學(xué)員類實例化對象、設(shè)置屬性,,初始屬性若太多,設(shè)置麻煩,能否在實例化時設(shè)置屬性?,public Student(string name, int age, string hobby) this.Name = name; this.Age = ag
13、e; this.Hobby = hobby; ,Student zhang = new Student(張靚靚, 20, 唱歌歌);,一次設(shè)置完成,類中加入這個方法,添加的方法叫做構(gòu)造函數(shù),構(gòu)造函數(shù),是類中的一種特殊的方法 構(gòu)造函數(shù)名與類名相同,不返回任何值 可初始化成員變量,class Student public Student(string name, int age, string hobby) this.Name = name; this.Age = age; this.Hobby = hobby; ,初始化成員變量,this 關(guān)鍵字引用類的當(dāng)前
14、實例,,將參數(shù)的值,分別賦給當(dāng)前實例的屬性,使用構(gòu)造函數(shù),new 關(guān)鍵字 可以實例化一個新的對象 指定對某個帶參數(shù)的構(gòu)造函數(shù),Student zhang = new Student(張靚靚, 20, 唱歌歌);,每次創(chuàng)建類的實例都會調(diào)用此方法,實例化對象調(diào)用構(gòu)造函數(shù),使用 new 關(guān)鍵字,Student scofield = new Student(); Student zhang = new Student(張靚靚, 20, 唱歌歌);,實例化一個對象,實例化一個新對象,public Student() public Student(string name, int age, string
15、 hobby) this.name = name; this.age = age; this.hobby = hobby; ,構(gòu)造函數(shù)的重載,構(gòu)造函數(shù)也可以重載,Student scofield = new Student(); Student zhang = new Student(張靚靚, 20, 唱歌歌);,,方法名相同,參數(shù)不同,綜合實戰(zhàn),構(gòu)造函數(shù)的重載,可以使類實例化對象更靈活,演示示例6:重載(RssRead類的搭建),都是讀寫屬性,private int a; public int A get return a; set a = value; ,你喜歡讀哪段代碼?,合格
16、的程序要符合編碼規(guī)則 直觀易于理解、有意義的單詞 方便維護(hù) 有利于調(diào)試,編碼規(guī)則的必要性,如name,age,student,private int name; public int Name get return name; set name = value; ,無法理解是什么,Pascal命名法 變量采用有意義的單詞 單詞的一個字母大寫 StudentName、MaxAge Camel命名法 變量采用有意義的單詞 第一個單詞的首字母小寫 其余單詞的首字母大寫 name, className,Pascal 和 Camel 命名法,public class Student private string firstName; public string FirstName get return firstName; ,總結(jié),簡述屬性和字段的區(qū)別? 只讀屬性中只有哪個訪問器? 簡述方法的重載時需要注意的問題? new關(guān)鍵字有什么作用? this關(guān)鍵字的作用是什么?,