




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、上海張江信息技術(shù)專修學(xué)院上海張江信息技術(shù)專修學(xué)院第五節(jié)屬性、索引器、異常處理屬性、索引器、異常處理上海張江信息技術(shù)專修學(xué)院上海張江信息技術(shù)專修學(xué)院目標(biāo)目標(biāo) 理解屬性及其不同的類型、實(shí)現(xiàn)理解屬性及其不同的類型、實(shí)現(xiàn) 理解和使用索引器理解和使用索引器上海張江信息技術(shù)專修學(xué)院上海張江信息技術(shù)專修學(xué)院屬性屬性 是類、結(jié)構(gòu)和接口的成員。是類、結(jié)構(gòu)和接口的成員。 它們通過存取子它們通過存取子 (Accessor) 提供讀取、寫入或提供讀取、寫入或計算私有計算私有 (Private) 字段值的彈性機(jī)制。字段值的彈性機(jī)制。 上海張江信息技術(shù)專修學(xué)院上海張江信息技術(shù)專修學(xué)院存取子存取子 將屬性存取子設(shè)定為將屬性
2、存取子設(shè)定為 get、set 或或 get/set。 默認(rèn)情況下默認(rèn)情況下 存取子存取子 選項設(shè)定為選項設(shè)定為 get/set。存取子選項存取子選項說明說明get讀取或計算屬性并傳回屬性和型別值。如果選擇此選項,屬讀取或計算屬性并傳回屬性和型別值。如果選擇此選項,屬性便是只讀的。性便是只讀的。set當(dāng)對屬性指派值時,會以提供新值的自變量來叫用當(dāng)對屬性指派值時,會以提供新值的自變量來叫用 set 存取存取子。如果您選擇了此選項,則屬性是唯寫的。子。如果您選擇了此選項,則屬性是唯寫的。get/set選擇此選項時,屬性將同時包含選擇此選項時,屬性將同時包含 get 和和 set 存取子。這是一存取子
3、。這是一個讀取寫入屬性。個讀取寫入屬性。上海張江信息技術(shù)專修學(xué)院上海張江信息技術(shù)專修學(xué)院修飾符修飾符 屬性可以加入下列修飾符之一。屬性可以加入下列修飾符之一。 static、virtual 和和 abstract 修飾符是彼此互斥的。修飾符是彼此互斥的。 修飾符修飾符說明說明無無沒有額外的修飾符沒有額外的修飾符Static屬性屬于該類本身而非一個特定的對象。屬性屬于該類本身而非一個特定的對象。Virtual屬性可以在子類中重寫屬性可以在子類中重寫Abstract 屬性是抽象類屬性是抽象類(Abstract Class) 的成員。的成員。上海張江信息技術(shù)專修學(xué)院上海張江信息技術(shù)專修學(xué)院屬性簡介屬
4、性簡介 3-1封裝把一些不重要的細(xì)節(jié)隱藏起來,封裝把一些不重要的細(xì)節(jié)隱藏起來,這樣你可以集中精力處理那些重要這樣你可以集中精力處理那些重要的內(nèi)容。的內(nèi)容。但封裝很難被掌握,一個典型的封但封裝很難被掌握,一個典型的封裝誤用是盲目地把公有字段轉(zhuǎn)為私裝誤用是盲目地把公有字段轉(zhuǎn)為私有字段。有字段。例如在例如在 上面的例子中,程序定義了上面的例子中,程序定義了一個私有字段一個私有字段hour和和SetHour函數(shù)函數(shù)和和GetHour函數(shù),而不是定義一個函數(shù),而不是定義一個公有的公有的hour字段。字段。如果如果GetHour函數(shù)只函數(shù)只 是返回私有字是返回私有字段的值而段的值而SetHour函數(shù)只是設(shè)
5、置私函數(shù)只是設(shè)置私有字段的值的話,那么你除了使有字段的值的話,那么你除了使Time類更難使用外,你不會得到任類更難使用外,你不會得到任何好處。何好處。 struct Time public int GetHour() return hour; public void SetHour(int value) hour = value; private int hour, minute, second; static void Main() Time lunch = new Time(); lunch.SetHour(12); Console.WriteLine(lunch.GetHour(); 上
6、海張江信息技術(shù)專修學(xué)院上海張江信息技術(shù)專修學(xué)院屬性簡介屬性簡介 3-1如果字段是公有的,那使如果字段是公有的,那使用起來是簡單的用起來是簡單的 但如果你使用公有字段的但如果你使用公有字段的話,你會失去控制權(quán)話,你會失去控制權(quán) 要簡化而不是簡單要簡化而不是簡單struct Time public int Hour; public int Minute; public int Second; static void Main() Time lunch = new Time(); lunch.Hour = 30; lunch.Minute = 12; lunch.Second = 0; 上海張江信息
7、技術(shù)專修學(xué)院上海張江信息技術(shù)專修學(xué)院解決的辦法解決的辦法 可以把可以把get和和set函數(shù)組合成一個簡單的屬性。函數(shù)組合成一個簡單的屬性。 屬性的聲明包括一個可選的訪問修飾符屬性的聲明包括一個可選的訪問修飾符(在例子中在例子中是是public)、返回值、返回值(int)、屬性的名字、屬性的名字 (Hour)和一和一個包含個包含get和和set語句的屬性體。語句的屬性體。注意注意: 屬性沒有括號,因?yàn)閷傩圆皇呛瘮?shù)。屬性沒有括號,因?yàn)閷傩圆皇呛瘮?shù)。 屬性的命名規(guī)則應(yīng)符合一般的命名規(guī)則,即公有屬性的命名規(guī)則應(yīng)符合一般的命名規(guī)則,即公有的使用的使用 PascalCase規(guī)則,而非公有的使用規(guī)則,而非公
8、有的使用camelCase規(guī)則。規(guī)則。 struct Time . public int Hour /沒有(),是沒有(),是H而不是而不是h get . set . private int hour, minute, second; Time lunch = new Time(); . lunch.Hour = 12; . Console.WriteLine(lunch.Hour);上海張江信息技術(shù)專修學(xué)院上海張江信息技術(shù)專修學(xué)院get語句語句 當(dāng)讀一個屬性的時候,屬性的當(dāng)讀一個屬性的時候,屬性的get語句自動運(yùn)行。語句自動運(yùn)行。 get語句必須返回一個有確定類型的值。語句必須返回一個有確定
9、類型的值。 屬性的返回值不能是屬性的返回值不能是void(從這里可以推斷出字段的類型(從這里可以推斷出字段的類型也不能是也不能是void)。)。 這這get語句必須包含一個完整的語句必須包含一個完整的return語句(語句(retun;這種這種形式是錯誤的)。形式是錯誤的)。 get語句可以在語句可以在retun語句前包含任何其他的語句語句前包含任何其他的語句,但但return語句不能省略。語句不能省略。注意注意: get和和set不是關(guān)鍵字不是關(guān)鍵字,可以在任何地方包括,可以在任何地方包括get/set語句中語句中聲明一個局部變量、常量的名字是聲明一個局部變量、常量的名字是get或或set,
10、但最好不要,但最好不要這樣做。這樣做。 必須返回一個有確定類型的值必須返回一個有確定類型的值 功能上就像一個功能上就像一個 “get 函數(shù)函數(shù)”struct Time . public int Hour get return hour; . private int hour, minute, second; Time lunch = new Time(); . Console.WriteLine(lunch.Hour);/請注意,請注意,get和和set不是關(guān)鍵字不是關(guān)鍵字上海張江信息技術(shù)專修學(xué)院上海張江信息技術(shù)專修學(xué)院set語句語句 當(dāng)寫一個屬性的時候,屬性的當(dāng)寫一個屬性的時候,屬性的set
11、語句自動運(yùn)行。語句自動運(yùn)行。 在上面的例子中,在上面的例子中,Time結(jié)構(gòu)類有一個整型屬性結(jié)構(gòu)類有一個整型屬性Hour,所以賦給這個屬性的值必須是一個整型值。,所以賦給這個屬性的值必須是一個整型值。 把一個整型值把一個整型值12賦給了賦給了lunch的的Hour屬性,這個屬性,這個語句會自動調(diào)用屬性的語句會自動調(diào)用屬性的set語句。語句。 set語句是通過語句是通過value標(biāo)識符來獲得屬性的賦值的。標(biāo)識符來獲得屬性的賦值的。例如,如果例如,如果12被賦給了被賦給了Hour屬性,那么屬性,那么vaue的的值就是值就是12。注意注意: value不是一個關(guān)鍵字。不是一個關(guān)鍵字。 value只是在
12、只是在set語句中才是一個標(biāo)識符。語句中才是一個標(biāo)識符。 你可以在你可以在set語句外的任何語句聲明語句外的任何語句聲明value為一變?yōu)橐蛔兞康拿帧A康拿?。通過通過value 標(biāo)識符來進(jìn)行賦值的標(biāo)識符來進(jìn)行賦值的可以包含任何語句(甚至沒有語句)可以包含任何語句(甚至沒有語句)struct Time . public int Hour . set if (value 24) throw new ArgumentException(value); hour = value; private int hour, minute, second; Time lunch = new Time();
13、. lunch.Hour = 12;上海張江信息技術(shù)專修學(xué)院上海張江信息技術(shù)專修學(xué)院只讀屬性只讀屬性 一個屬性可以不必同時聲明一個屬性可以不必同時聲明get語句和語句和set語句。語句。 可以只聲明一個可以只聲明一個get語句。在這種情況下,屬性是語句。在這種情況下,屬性是只讀的,任何寫的操作都會導(dǎo)致錯誤。只讀的,任何寫的操作都會導(dǎo)致錯誤。 任何寫操作都會導(dǎo)致錯誤任何寫操作都會導(dǎo)致錯誤 就像一個只讀字段就像一個只讀字段struct Time . public int Hour get return hour; private int hour, minute, second; Time lun
14、ch = new Time(); . lunch.Hour = 12; /錯誤錯誤. lunch.Hour += 2;/錯誤錯誤上海張江信息技術(shù)專修學(xué)院上海張江信息技術(shù)專修學(xué)院只寫屬性只寫屬性 一個屬性可以不必同時聲明一個屬性可以不必同時聲明get語句和語句和set語句。語句。 你可以只聲明一個你可以只聲明一個set語句。在這種情況下,屬性語句。在這種情況下,屬性是只寫的,任何讀的操作都會導(dǎo)致錯誤。是只寫的,任何讀的操作都會導(dǎo)致錯誤。 任何讀操作都是錯誤的任何讀操作都是錯誤的struct Time . public int Hour set if (value 24) throw new Ou
15、tOfRangeException(Hour); hour = value; private int hour, minute, second; Time lunch = new Time(); . Console.WriteLine(lunch.Hour); /錯誤錯誤. lunch.Hour += 12; /錯誤錯誤上海張江信息技術(shù)專修學(xué)院上海張江信息技術(shù)專修學(xué)院readonly vs. const vs.getreadonly和和const都是用來標(biāo)識常量都是用來標(biāo)識常量const可用于修飾可用于修飾class的的field或者一個局部變量;而或者一個局部變量;而readonly僅僅用于
16、僅僅用于修飾修飾class的的field。 const常量的值必定在編譯時就已明確并且恒定的;而常量的值必定在編譯時就已明確并且恒定的;而readonly常量其值常量其值可以在運(yùn)行時編譯可以在運(yùn)行時編譯.const常量必須在聲明的同時對其進(jìn)行賦值常量必須在聲明的同時對其進(jìn)行賦值;而而readonly常量則可以根據(jù)常量則可以根據(jù)情況選擇在聲明的同時對其賦予一個編譯時確定并恒定的值,或者將其情況選擇在聲明的同時對其賦予一個編譯時確定并恒定的值,或者將其值的初始化工作交給實(shí)例構(gòu)造函數(shù)完成。值的初始化工作交給實(shí)例構(gòu)造函數(shù)完成。 const常量屬于類級別而不是實(shí)例對象級別并且它不能跟常量屬于類級別而不是
17、實(shí)例對象級別并且它不能跟static結(jié)合一起結(jié)合一起使用,該常量的值將由整個類的所有實(shí)例對象共同分享使用,該常量的值將由整個類的所有實(shí)例對象共同分享readonly常量既可以是類級別也可以是實(shí)例對象級別的,這取決于它的常量既可以是類級別也可以是實(shí)例對象級別的,這取決于它的聲明以及初始化工作怎么實(shí)施。聲明以及初始化工作怎么實(shí)施。readonly可以與可以與static結(jié)合使用,用于指結(jié)合使用,用于指定該常量屬于類級別,并且把初始化工作交由靜態(tài)構(gòu)造函數(shù)完成定該常量屬于類級別,并且把初始化工作交由靜態(tài)構(gòu)造函數(shù)完成能被能被const修飾聲明為常量的類型必須是以下的基元類型:修飾聲明為常量的類型必須是以
18、下的基元類型:sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, float, bool, decimal, string。 object, 數(shù)組(數(shù)組(Array)和結(jié)構(gòu)()和結(jié)構(gòu)(struct)不能被聲明為)不能被聲明為const常量。常量。 一般情況下,引用類型是不能被聲明為一般情況下,引用類型是不能被聲明為const常量的,不過有一個例外:常量的,不過有一個例外:string。上海張江信息技術(shù)專修學(xué)院上海張江信息技術(shù)專修學(xué)院readonly vs. const vs.get 當(dāng)讀一個屬性的時候
19、,屬性的當(dāng)讀一個屬性的時候,屬性的get語句自動運(yùn)行。語句自動運(yùn)行。 get語句必須返回一個有確定類型的值。語句必須返回一個有確定類型的值。 屬性的返回值不能是屬性的返回值不能是void(從這里可以推斷出字段(從這里可以推斷出字段的類型也不能是的類型也不能是void)。)。 這這get語句必須包含一個完整的語句必須包含一個完整的return語句(語句(retun;這種形式是錯誤的)。這種形式是錯誤的)。 get語句可以在語句可以在retun語句前包含任何其他的語句語句前包含任何其他的語句,但但return語句不能省略。語句不能省略。class Customer public Customer(
20、string name, int kind) m_Name = name; m_Kind = kind; public const int NORMAL = 0; public const int VIP = 1; public const int SUPER_VIP = 2; private string m_Name; public string Name get return m_Name; private readonly int m_Kind; public int Kind get return m_Kind; public override string ToString() i
21、f(m_Kind = SUPER_VIP) return Name: + m_Name + SuperVip; else if(m_Kind = VIP) return Name: + m_Name + Vip; else return Name: + m_Name + Normal; 上海張江信息技術(shù)專修學(xué)院上海張江信息技術(shù)專修學(xué)院索引器索引器 索引器索引器(Indexer)是是C#引入的一個新型的類成員,引入的一個新型的類成員,它使得對象可以像數(shù)組那樣被方便,直觀的引用。它使得對象可以像數(shù)組那樣被方便,直觀的引用。 索引器非常類似于屬性,但索引器可以有參數(shù)列索引器非常類似于屬性,但索引器可
22、以有參數(shù)列表,且只能作用在實(shí)例對象上,而不能在類上直表,且只能作用在實(shí)例對象上,而不能在類上直接作用。接作用。 索引器沒有像屬性和方法那樣的名字,關(guān)鍵字索引器沒有像屬性和方法那樣的名字,關(guān)鍵字this清楚地表達(dá)了索引器引用對象的特征。清楚地表達(dá)了索引器引用對象的特征。 和屬性一樣,和屬性一樣,value關(guān)鍵字在關(guān)鍵字在set后的語句塊里有后的語句塊里有參數(shù)傳遞意義。參數(shù)傳遞意義。 索引器有索引器有5種存取保護(hù)級別,和種存取保護(hù)級別,和4種繼承行為修飾,種繼承行為修飾,以及外部索引器。以及外部索引器。 索引器不能為靜態(tài)(索引器不能為靜態(tài)(static) .語法語法:訪問修飾符訪問修飾符 數(shù)據(jù)類型
23、數(shù)據(jù)類型 this數(shù)據(jù)類型數(shù)據(jù)類型 標(biāo)識符標(biāo)識符get;set;class MyClasspublic object this int indexget/ 取數(shù)據(jù)取數(shù)據(jù)set / 存數(shù)據(jù)存數(shù)據(jù) 上海張江信息技術(shù)專修學(xué)院上海張江信息技術(shù)專修學(xué)院索引器的參數(shù)索引器的參數(shù) “索引索引”的特征使得索引器必須具備至少一個參數(shù),的特征使得索引器必須具備至少一個參數(shù),該參數(shù)位于該參數(shù)位于this關(guān)鍵字之后的中括號內(nèi)。關(guān)鍵字之后的中括號內(nèi)。 索引器的參數(shù)也只能是傳索引器的參數(shù)也只能是傳 值類型,不可以有值類型,不可以有ref(引用(引用)和和out(輸出)修飾。(輸出)修飾。 參數(shù)的數(shù)據(jù)類型可以是參數(shù)的數(shù)據(jù)類
24、型可以是C#中的任何數(shù)據(jù)類型。中的任何數(shù)據(jù)類型。 C#根據(jù)不同的參數(shù)簽名來進(jìn)行索引器的多態(tài)辨析。根據(jù)不同的參數(shù)簽名來進(jìn)行索引器的多態(tài)辨析。 中括中括 號內(nèi)的所有參數(shù)在號內(nèi)的所有參數(shù)在get和和set下都可以引用,下都可以引用,而而value關(guān)鍵字只能在關(guān)鍵字只能在set下作為傳遞參數(shù)。下作為傳遞參數(shù)。 上海張江信息技術(shù)專修學(xué)院上海張江信息技術(shù)專修學(xué)院索引器索引器 例例1class stuprivate string name;private int age;private string tel=new string3;public string thisint index getreturn
25、telindex; settelindex=value;public stu(string name,int age,string tel)=name;this.age=age;for(int i =0;itel.Length ;i+) this.teli=teli;public void dis()Console.WriteLine(your name is 0,);Console.WriteLine (your age is +this.age);for(int i =0;itel.Length ;i+)Console.WriteLine (this.t
26、eli);public string Namegetreturn ;=value;public int Agegetreturn this.age;setthis.age=value;public class MainClass public static void Main() string b=new string3;b0=abc;b1=123;b2=325;stu a=new stu(clm,12,b);a.dis ();stu b1=new stu(lm,121,b);b1.dis();b10=111;b1.dis();上海張江信息技術(shù)專修學(xué)院
27、上海張江信息技術(shù)專修學(xué)院索引器索引器 例例2class Class1string s_name=new string8;public string thisint nIndexgetreturn s_namenIndex;sets_namenIndex=value;class Teststatic void Main(string args)Class1 t1=new Class1();for(int i=0;i6;i+)t1i=Console.ReadLine(); for(int i=0;i6;i+) Console.WriteLine (t1i); 上海張江信息技術(shù)專修學(xué)院上海張江信息技術(shù)專修學(xué)院索引器索引器 例例3class IndexerClass private int myArray = new int100; public int this int index / Indexer declarationget / Check the index limits. if (index = 100)return 0; else return myArrayindex; set if (!(index = 100) myArrayindex = value; public class MainClass public static void M
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 菏澤家政職業(yè)學(xué)院《國際貿(mào)易綜合模擬》2023-2024學(xué)年第二學(xué)期期末試卷
- 武漢工程科技學(xué)院《攝影與生活》2023-2024學(xué)年第二學(xué)期期末試卷
- 北京航空航天大學(xué)《信號與系統(tǒng)仿真基礎(chǔ)實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 哈爾濱科學(xué)技術(shù)職業(yè)學(xué)院《電子電路應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京大學(xué)金陵學(xué)院《朗讀技能指導(dǎo)與訓(xùn)練》2023-2024學(xué)年第二學(xué)期期末試卷
- 隴南師范高等??茖W(xué)校《財稅法》2023-2024學(xué)年第二學(xué)期期末試卷
- 貴陽信息科技學(xué)院《建設(shè)法規(guī)與工程監(jiān)理概論》2023-2024學(xué)年第二學(xué)期期末試卷
- 云南商務(wù)職業(yè)學(xué)院《控制儀表及裝置》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東行政職業(yè)學(xué)院《建筑工程計量與計價A》2023-2024學(xué)年第二學(xué)期期末試卷
- 北方工業(yè)大學(xué)《衛(wèi)生財務(wù)管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 舞臺劇合作合同協(xié)議
- 影視文化試題及答案解析
- 施工現(xiàn)場安全施工方案
- DB63T2004-2021 瀝青路面就地冷再生基層技術(shù)規(guī)范
- 大學(xué)武術(shù)知到智慧樹章節(jié)測試課后答案2024年秋浙江大學(xué)
- 2023年全國職業(yè)院校技能大賽-老年護(hù)理與保健賽項規(guī)程
- MOOC 財政學(xué)-浙江財經(jīng)大學(xué) 中國大學(xué)慕課答案
- JJG 443-2023燃油加油機(jī)(試行)
- 材料力學(xué)第4版單輝祖習(xí)題答案
- 消防控制室值班記錄1
- 三國演義-人物-藝術(shù)手法
評論
0/150
提交評論