版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第5章 基于對象程序設(shè)計(jì)本章主要內(nèi)容:1類、對象和封裝。2聲明和使用字段。3聲明和使用屬性。4常數(shù)和只讀字段5成員訪問控制。6類作用域。調(diào)用類成員。7默認(rèn)屬性。使用動態(tài)數(shù)組。8屬性與字段的比較。屬性和方法的比較9使用Me 關(guān)鍵字。10實(shí)例構(gòu)造函數(shù)。11默認(rèn)實(shí)例構(gòu)造函數(shù)。12對象創(chuàng)建表達(dá)式。13默認(rèn)初始化字段。顯式初始化字段。14實(shí)例構(gòu)造函數(shù)重載。15調(diào)用同類中的其它構(gòu)造函數(shù)。16調(diào)用不同的實(shí)例構(gòu)造函數(shù)創(chuàng)建對象。多個類的使用。17靜態(tài)字段和實(shí)例字段。18靜態(tài)構(gòu)造函數(shù)。靜態(tài)方法。19靜態(tài)和實(shí)例成員特征。20對象參數(shù)與返回值為對象。對象的賦值運(yùn)算。21重載方法。使用重載的方法目標(biāo):· 區(qū)分
2、類和對象,區(qū)分對象聲明與對象創(chuàng)建。· 區(qū)分字段和屬性。· 定義可實(shí)例化類及構(gòu)造函數(shù)。· 創(chuàng)建、使用對象。· 使用實(shí)例構(gòu)造函數(shù)重載及方法重載。· 理解靜態(tài)成員和實(shí)例成員及它們訪問方式的區(qū)別。· 理解成員訪問修飾符public和private。· 定義實(shí)例成員和靜態(tài)成員。· 使用對象參數(shù)和返回值為對象的方法第1節(jié) 類、對象和封裝 “類”和“對象”在面向?qū)ο蟮木幊讨惺褂玫梅浅6?,很容易將它們混淆。一般來說,“類”是一些內(nèi)容的抽象表示形式,而“對象”是類所表示的內(nèi)容的可用示例。類描述對象的“結(jié)構(gòu)”,而對象則是類的可用“實(shí)例
3、”。每個實(shí)例都是其類的一個精確而又不同的副本。由于對象是類的一個“實(shí)例”,所以創(chuàng)建對象的動作就稱為“實(shí)例化”。使用藍(lán)圖類比,類是藍(lán)圖,對象就是基于該藍(lán)圖的建筑。大部分情況下,更改一個對象中的數(shù)據(jù)并不會更改其他任何對象中的數(shù)據(jù)。面向?qū)ο笫褂妙悂矸庋b數(shù)據(jù)(屬性)和方法(行為)。封裝使對象能夠向客戶隱藏它們的實(shí)現(xiàn)-該原則稱為信息隱藏。盡管客戶可以通過對象良好定義的接口使用它。正如駕駛員在不知道發(fā)動機(jī)、變速器和轉(zhuǎn)向等系統(tǒng)使任何工作的情況下,駕駛員也能夠有效地駕駛汽車。封裝還使你可以控制如何使用數(shù)據(jù)和過程??梢允褂迷L問修飾符(如 Private 或 Protected)來防止外部過程執(zhí)行類方法或讀取與修
4、改屬性和字段中的數(shù)據(jù)。應(yīng)當(dāng)將類的內(nèi)部詳細(xì)信息聲明為 Private 以防止在類外使用它們,此技術(shù)稱為“數(shù)據(jù)隱藏”。在 loan 類中,貸款信息(如貸款數(shù)量)就是用這種方式保護(hù)的。封裝的一個基本規(guī)則是類數(shù)據(jù)應(yīng)當(dāng)只能通過 訪問器或方法來修改或檢索。隱藏類的實(shí)現(xiàn)詳細(xì)信息可以防止這些信息被以不希望的方式使用,并使你可以在以后修改此類項(xiàng)時沒有兼容性問題方面的風(fēng)險。類使你得以只聲明一次變量和方法,然后在任何需要的時候重用它們。例如,如果要將貸款計(jì)算器添加到應(yīng)用程序中,可以定義所有變量和方法,以便為應(yīng)用程序提供貸款計(jì)算功能。但是,如果將貸款計(jì)算器創(chuàng)建為一個類,則可以在其他應(yīng)用程序中重用該類。更好的是,可能能
5、夠通過使用其他人已經(jīng)開發(fā)的貸款計(jì)算器類,省去自己的一些工作。類可以定義對象的屬性和執(zhí)行的操作(方法),并定義保存對象狀態(tài)值的變量(字段)。在面向?qū)ο蟮母拍罾?,現(xiàn)實(shí)世界的個體(對象)將抽象化為程序中的對象,而個體(對象)的數(shù)據(jù)抽象化為對象的數(shù)據(jù)成員(字段和常量),即個體(對象)的特性抽象化為對象的屬性,個體(對象)的行為及處理問題的方法成為對象的方法。類的實(shí)例是對象。對象可以執(zhí)行類定義的操作,處理屬于類定義的數(shù)據(jù),可以通過調(diào)用對象的方法并訪問其屬性,來訪問對象的功能。第2節(jié) 字段字段是表示與對象或類關(guān)聯(lián)的變量, 它用來存儲對象狀態(tài)的值或?qū)傩缘闹?,即字段用來存儲對象的?shù)據(jù)。如果把字段聲明為publ
6、ic,那么在類外面能夠訪問該字段。在類外面,訪問字段的語法是:對象名.字段名既然在類外面能夠訪問字段(給字段賦值、讀取字段的值),那么我們?yōu)槭裁丛诼暶黝悤r,還要聲明訪問器(設(shè)置或檢索屬性值的方法)來獲取和設(shè)置這些字段的值呢?系統(tǒng)開發(fā)人員的一個目標(biāo)是,他們設(shè)計(jì)的類不但對客戶隱藏了方法的實(shí)現(xiàn),而且不允許客戶直接訪問字段。通過提供訪問器來獲取和設(shè)置這些字段的值,可以確保字段被正確地對待(即符合邏輯規(guī)則)而且執(zhí)行所需地附加處理。為了說明這一點(diǎn),請看以下實(shí)例。2.1 實(shí)例:改寫貸款計(jì)算器問題描述:編寫一貸款計(jì)數(shù)器程序,對于特定的代款數(shù)量、年利率和貸款周期,計(jì)算月付款和總付款。分析:由問題描述可知,貸款(
7、Loan)對象具有代款數(shù)量、年利率和貸款周期屬性。對于每個貸款都具有確定的代款數(shù)量、年利率和貸款周期,但它們的值可能不同。貸款周期即可以是年作為單位,也可以是月作為單位。因此在貸款類中,我們聲明兩個字段years和months,以存儲貸款周期(years的值表示以年為單位的貸款周期,months值表示以月為單位的貸款周期),years和months這兩個字段在邏輯上是相關(guān)的(months的值是years值的12倍,years的值是months的值12等份)。1.打開前面創(chuàng)建的LoanCalculatoApp項(xiàng)目中的代碼文件LoanCalculator.vb,修改LoanCalculator類(
8、帶底紋部分)。public class Loan private final int MONTHS_IN_YEARS=12; /聲明字段常量 private double loanAmount; /聲明字段 loanAmount private int years;/聲明字段 years private int months;/聲明字段months private float annualInterestRate;/聲明字段 annualInterestRate /聲明讀取屬性LoanAmount的值方法 public double getLoanAmount() return loanAmo
9、unt; /聲明設(shè)置屬性LoanAmount的值的方法 public void setLoanAmount(double newloanAmount) loanAmount=newloanAmount; /聲明設(shè)置屬性Years的值的方法 public void setYears(int newyears) years=newyears; months = newyears * MONTHS_IN_YEARS; /聲明讀取屬性Years的值的方法 public int getYears() return years; /聲明讀取屬性Months的值的方法 public int getMonth
10、s() return months; /聲明設(shè)置屬性Months的值的方法 public void setMonths(int newmonths) years=newmonths/MONTHS_IN_YEARS; months = newmonths; /聲明讀取屬性AnnualInterestRate的值的方法 public float getAnnualInterestRate() return annualInterestRate; /聲明設(shè)置屬性AnnualInterestRate的值的方法 public void setAnnualInterestRate(float newAnn
11、ualInterestRate) annualInterestRate=newAnnualInterestRate; /聲明計(jì)算月付款的方法 public double computeMonthlyPayment() float monthlyInterestRate; int numberOfPayments ; double monthlyPayment ; monthlyInterestRate = annualInterestRate / 100.0f / MONTHS_IN_YEARS; numberOfPayments = getMonths(); monthlyPayment =
12、 (loanAmount * monthlyInterestRate) / (1 - (Math.pow(1 + monthlyInterestRate), -numberOfPayments); return monthlyPayment; /聲明計(jì)算總付款的方法 public double computeTotalPayment() double totalPayment ; totalPayment = computeMonthlyPayment()*getMonths(); return totalPayment; 2打開前面創(chuàng)建的LoanCalculatoApp項(xiàng)目中的代碼文件Loa
13、nCalculatorTest.vb,修改LoanCalculatorTest類(帶底紋部分),然后保存文件。public class LoanTest public static void main(String args) /聲明3個變量 double aloanAmount, monthlyPayment, totalPayment ; /創(chuàng)建貸款計(jì)算器對象 Loan aLoan=new Loan(); /調(diào)用貸款計(jì)算器對象的setLoanAmount方法 / 將貸款計(jì)算機(jī)對象貸款數(shù)量的值設(shè)置為2000.0 aLoan.setLoanAmount(20000.0); / 調(diào)用貸款計(jì)算器對
14、象的setLoanPeriod方法 /將貸款周期屬性的值設(shè)置為12(單位年) aLoan.setYears(12); /調(diào)用貸款計(jì)算器對象的setAnnualInterestRate方法 /將年利率屬性的值設(shè)置為7(即7%) aLoan.setAnnualInterestRate(7.0f); /調(diào)用貸款計(jì)算器對象的computeMonthlyPayment方法計(jì)算月付款 / 并將方法的返回值付給變量 monthlyPayment monthlyPayment=aLputeMonthlyPayment(); /調(diào)用貸款計(jì)算器對象的computeTotalPayment方法計(jì)算總付款 / 并將方
15、法的返回值付給變量totalPayment totalPayment=aLputeTotalPayment(); / 調(diào)用貸款計(jì)算器對象的getLoanAmount方法讀取貸款數(shù)量屬性的值 aloanAmount=aLoan.getLoanAmount(); /調(diào)NumberFormat類的getCurrencyInstance / 創(chuàng)建 NumberFormat對象currencyformatter /準(zhǔn)備將指定數(shù)值的格式化為貨幣 NumberFormat currencyformatter=NumberFormat.getCurrencyInstance(); /連接字符串付給String
16、類型的變量output String output="貸款金額: "+currencyformatter.format(aloanAmount)+"n"+ "貸款周期: "+aLoan.getMonths()+"(月)n"+ "年利率: "+aLoan.getAnnualInterestRate()+"%"+"n"+ "月付款: "+currencyformatter.format(monthlyPayment)+"n&quo
17、t;+ "總付款: "+ currencyformatter.format(totalPayment)+"nn" aLoan.setMonths(24); monthlyPayment = aLputeMonthlyPayment(); totalPayment = aLputeTotalPayment() ; output+="貸款金額: "+currencyformatter.format(aloanAmount)+"n"+ "貸款周期: "+aLoan.getYears()+"(
18、年)n"+ "年利率: "+aLoan.getAnnualInterestRate()+"%"+"n"+ "月付款: "+currencyformatter.format(monthlyPayment)+"n"+ "總付款: "+ currencyformatter.format(totalPayment)+"n" /在消息框中顯示字符串output JOptionPane.showMessageDialog( null,output, &quo
19、t;結(jié)果",+JOptionPane.INFORMATION_MESSAGE); System.exit(0); 3按F5編譯并運(yùn)行該程序,運(yùn)行結(jié)果如圖5.1所示。圖5.1 程序運(yùn)行結(jié)果代碼分析與討論:1)通過訪問器來獲取和設(shè)置字段的值,可以確保字段的值是正確的。例如,貸款的數(shù)量不可能是一個負(fù)數(shù),通過以上定義的setLoanAmount訪問器,可以確保loanAmount字段的值不是一個負(fù)數(shù)。因?yàn)镾et 方法可提供驗(yàn)證代碼以防止不正確地更新貸款數(shù)量。簡而言之,訪問器允許對象保護(hù)和驗(yàn)證自己的數(shù)據(jù)。2)通過訪問器來設(shè)置字段的值,可確保對一個字段的設(shè)置會正確的影響其它相關(guān)聯(lián)的字段或?qū)傩缘闹?/p>
20、。,例如,Loan類包含兩個在邏輯上相關(guān)的字段years和months,當(dāng)客戶(使用者)修改字段years的值時,訪問器setYears對設(shè)置的值進(jìn)行驗(yàn)證,并根據(jù)給years設(shè)置的值設(shè)置months字段的值。如果客戶可以直接訪問訪問公共的(public)years字段和months字段,那么就無法保證它們的值是有效的,也無法保證months字段的值和years字的值不相矛盾(因?yàn)榭蛻艨山oyears設(shè)置為12,而給months的設(shè)置為2,正確的應(yīng)該是years值為12時,months的值必須是144)。Public Sub setYears(ByVal newyears As Integer)
21、If newyears > 0 Then years = newyears months = newyears * MONTHS_IN_YEARS Else years = 0 months = 0 End IfEnd Sub同理,訪問器setMonths確保months字段的值和years字的值不相矛盾,并確保它們的值是正確的。例如,客戶通過訪問器setMonths將months字段的值修改為24后,years字的值為2,程序運(yùn)行的結(jié)果就證明了這一點(diǎn)。3)常數(shù)。常數(shù)就是其值不能改變的字段。如實(shí)際例中聲明了一常數(shù)MONTHS_IN_YEARS,它的值在程序運(yùn)行過程中始終是12,且不能被改
22、變。4)如果幾個字段或?qū)傩韵嗷リP(guān)聯(lián),則可省略一些字段的聲明,不必每個屬性聲明一個字段。例如,years字段和months字段相互關(guān)聯(lián),則我們可省略其中一個字段的聲明。我們修改Loan類,刪除years字段的聲明,然后修改訪問器setYears,getYears、setMonths、getMonths()如下,可獲得同樣的結(jié)果。Public Sub setYears(ByVal newyears As Integer) If newyears > 0 Then months = newyears * MONTHS_IN_YEARS Else months = 0 End If End Su
23、b ' /聲明讀取屬性years的值的方法 Public Function getYears() As Integer Return months / MONTHS_IN_YEARSEnd Function/聲明讀取屬性Months的值的方法 Public Sub setMonths(ByVal newmonths As Integer) If newmonths > 0 Then months = newmonths Else months = 0 End If End Sub ' /聲明讀取屬性Months的值的方法 Public Function getMonths
24、() As Integer Return months End Function2.2 常數(shù)和只讀字段。1. 常數(shù)。常數(shù)就是其值不能改變的字段。常數(shù)也是類的成員之一,它表示一個常數(shù)值:一個可以在編譯時計(jì)算的值。在將某些東西定義為常數(shù)時需要記住二條原則:l 常數(shù)成員的值是一個在編譯時計(jì)算的值。l 要想將字段聲明為常數(shù),只需在被聲明的字段前指定final關(guān)鍵字。如改寫貸款計(jì)算器實(shí)例中聲明了一常數(shù)MONTHS_IN_YEARS,它的值在程序運(yùn)行過程中始終是12,且不能被改變:private final int MONTHS_IN_YEARS=12; /聲明字段常量2. 只讀字段。如果字段的值在編譯時
25、無法計(jì)算出值,但要求字段被初始化就不能被修改,則可以使用 final關(guān)鍵字聲明字段。當(dāng)字段聲明中含有 final修飾符但沒被賦值時,該聲明所引入的字段為只讀字段。只有構(gòu)造函數(shù)才能初始化只讀字段,且只讀字段的值只有構(gòu)造函數(shù)才能修改。private final int a 2.3 成員訪問控制訪問修飾符public和private控制對類的字段、屬性和方法的訪問(下一小節(jié)將引入屬性,第9章將引入另一個訪問修飾符protected)。正如前面所提到的,公有(public)方法的主要目的是讓類的客戶了解該類所提供的服務(wù)(該類的public接口),而不必關(guān)心該類如何實(shí)現(xiàn)它的任務(wù)。因而,類的客戶不能直接地
26、訪問類的private字段,private屬性和private方法。通過關(guān)鍵字private限制對類成員的訪問稱為信息隱藏。例如,在改寫貸款計(jì)算器實(shí)例中,如果我們在TestLoan類的main方法中,將以下代碼改為帶底紋的代碼,則在編譯程序時,會發(fā)生編譯錯誤,程序無法訪問private字段loanAmount、months和annualInterestRate。如果將字段loanAmount、months和annualInterestRate的訪問修飾符改為public,則程序運(yùn)行不會發(fā)生錯誤。aLoan.setLoanAmount(20000.0) aLoan.setYears(12) aL
27、oan.setAnnualInterestRate(7.0) aLoan.loanAmount = 20000.0 aLoan.months = 12 aLoan.annualInterestRate = 7如果將該main方法放在Loan類中,則不會發(fā)生編譯錯誤,可以訪問private字段loanAmount、months和annualInterestRate。第3節(jié) Set訪問器和Get訪問器Set訪問器和Get訪問器是一種用于訪問對象或類的特性的方法。Set訪問器用于設(shè)置屬性的值,Get訪問器用于獲取屬性的值。Set訪問器和Get訪問器通常稱為標(biāo)準(zhǔn)方法,也稱為Set方法和Get方法,Se
28、t方法的方法名前帶有set,后面是屬性名稱,新的屬性值通過 該方法的參數(shù)傳遞,該方法一般不會返回值,為void類型。如:public double getLoanAmount() return loanAmount; 3.1 實(shí)例:聲明和使用屬性問題描述:改寫上例的貸款計(jì)算器程序,在Loan類中,用屬性聲明替換訪問方法聲明,并在TestLoan類中,使用屬性。1.打開前面創(chuàng)建的LoanCalculatoApp項(xiàng)目中的代碼文件LoanCalculator.vb,修改LoanCalculator類(帶底紋部分)。Public Class Loan Private Const MONTHS_IN_Y
29、EARS As Integer = 12 Private m_loanAmount As Decimal '/聲明字段 m_loanAmount 'Private years As Integer '/聲明字段 years Private m_months As Integer '/聲明字段 m_months Private m_annualInterestRate As Single '/聲明字段 m_annualInterestRate '/聲明屬性LoanAmount Public Property LoanAmount() As Deci
30、mal Get Return m_loanAmount End Get Set(ByVal Value As Decimal) If Value < 0 Then m_loanAmount = 0 Else m_loanAmount = Value End If End Set End Property ' /聲明屬性Months Public Property Months() As Integer Get Return m_months End Get Set(ByVal Value As Integer) If Value > 0 Then m_months = Va
31、lue Else m_months = 0 End If End Set End Property '聲明屬性years Public Property Years() As Integer Get Return m_months / MONTHS_IN_YEARS End Get Set(ByVal Value As Integer) If Value > 0 Then m_months = Value * MONTHS_IN_YEARS Else m_months = 0 End If End Set End Property ' /聲明屬性AnnualInteres
32、tRate Public Property AnnualInterestRate() As Single Get Return m_annualInterestRate End Get Set(ByVal Value As Single) m_annualInterestRate = Value End Set End Property '/聲明計(jì)算月付款的方法 Public Function computeMonthlyPayment() As Decimal Dim monthlyInterestRate As Single Dim numberOfPayments As Inte
33、ger Dim monthlyPayment As Decimal monthlyInterestRate = AnnualInterestRate / 100.0F / MONTHS_IN_YEARS numberOfPayments = Months monthlyPayment = (LoanAmount * monthlyInterestRate) / _ (1 - (Math.Pow(1 + monthlyInterestRate), -numberOfPayments) Return monthlyPayment End Function ' /聲明計(jì)算總付款的方法 Pub
34、lic Function computeTotalPayment() As Decimal Dim totalPayment As Decimal totalPayment = computeMonthlyPayment() * Months Return totalPayment End FunctionEnd Class2打開前面創(chuàng)建的LoanCalculatoApp項(xiàng)目中的代碼文件LoanCalculatorTest.vb,修改LoanCalculatorTest類(帶底紋部分),然后保存文件。Public Class LoanTest Public Shared Sub main()
35、'聲明3個變量 Dim loanAmount, monthlyPayment, totalPayment As Decimal '創(chuàng)建貸款計(jì)算器對象 Dim aLoan As Loan = New Loan '調(diào)用貸款計(jì)算器對象的LoanAmount屬性的set訪問器 '將貸款計(jì)算機(jī)對象貸款數(shù)量的值設(shè)置為2000.0 aLoan.LoanAmount = 20000.0 '調(diào)用貸款計(jì)算器對象的Years屬性的set方法 '將貸款周期屬性的值設(shè)置為12(單位年) aLoan.Years = 12 '調(diào)用貸款計(jì)算器對象的AnnualInter
36、estRate屬性的set訪問器 '將年利率屬性的值設(shè)置為7(即7%) aLoan.AnnualInterestRate = 7 '讀取計(jì)算器對象貸款數(shù)量屬性的值,將其賦給aloanAmount變量 Dim aloanAmount As Decimal = aLoan.LoanAmount '讀取計(jì)算器對象貸款周期屬性的值,將其賦給aloanPeriod變量 Dim aloanPeriod As Integer = aLoan.Months '讀取計(jì)算器對象年利率屬性的值,將其賦給aannualInterestRate變量 Dim aannualInterest
37、Rate As Single = aLoan.AnnualInterestRate '調(diào)用貸款計(jì)算器對象的computeMonthlyPayment方法計(jì)算月付款 '并將方法的返回值付給變量 monthlyPayment monthlyPayment = aLputeMonthlyPayment() '調(diào)用貸款計(jì)算器對象的computeTotalPayment方法計(jì)算總付款 '并將方法的返回值付給變量totalPayment totalPayment = aLputeTotalPayment() ' 調(diào)用貸款計(jì)算器對象的getLoanAmount方法讀取
38、貸款數(shù)量屬性的值 aloanAmount = aLoan.LoanAmount Dim output As String ' 格式化字符串賦給String類型的變量output output = String.Format("貸款金額:0:c1貸款周期: 2(月)3年利率: 4%5月付款: 6:c7總付款: 8:c", _ aloanAmount, vbNewLine, aloanPeriod, _ vbNewLine, aLoan.AnnualInterestRate, _ vbNewLine, monthlyPayment, vbNewLine, totalPa
39、yment) output += vbNewLine & vbNewLine aLoan.Months = 24 monthlyPayment = aLputeMonthlyPayment() totalPayment = aLputeTotalPayment() output += String.Format("貸款金額:0:c1貸款周期: 2(年)3年利率: 4%5月付款: 6:c7總付款: 8:c", _ aloanAmount, vbNewLine, aLoan.Years, _ vbNewLine, aannualInterestRate, _ vbNew
40、Line, monthlyPayment, vbNewLine, totalPayment) MessageBox.Show(output, "結(jié)果") End SubEnd Class3按F5編譯并運(yùn)行該程序,運(yùn)行結(jié)果如圖6.1所示。圖5.2 程序運(yùn)行結(jié)果代碼分析與討論:1)屬性聲明。屬性是對象或類的特性。與字段不同,屬性有訪問器,這些訪問器指定要在它們的值被讀取或?qū)懭霑r執(zhí)行的語句。這些語句可以對字段和屬性進(jìn)行計(jì)算,并將計(jì)算結(jié)果返回給相關(guān)字段。對屬性聲明時必須指定屬性的類型 、屬性名稱和屬性的訪問器聲明,即: Property 屬性名(參數(shù)列表)As 數(shù)據(jù)類型屬性訪問器聲
41、明 End Property屬性可以有參數(shù),也可以沒有參數(shù),當(dāng)有參數(shù)時,除了參數(shù)必須是值(ByVal)參數(shù)外,參數(shù)列表的聲明與方法相同。屬性訪問器包含與獲?。ㄗx取或計(jì)算)或設(shè)置(寫)屬性有關(guān)的可執(zhí)行語句。屬性訪問器聲明可以包含 get 訪問器或 set 訪問器,或者兩者均包含。get 訪問器或 set 訪問器聲明采用下列形式:Set accessor-bodyEnd SetGet accessor-bodyEnd Get此處: accessor-body 包含將在調(diào)用訪問器時執(zhí)行的語句的塊。 如果已知屬性名為 P,則類中包含使用此名稱的聲明,將導(dǎo)致編譯時錯誤。2)get 訪問器get 訪問器相
42、當(dāng)于一個無參數(shù)方法,該方法具有屬性類型的返回值以及與包含屬性相同的修飾符(已知屬性名為 P,Get訪問器聲明隱式地使用與該屬性相同的修飾符、類型和參數(shù)列表聲明名為 get_P 的方法)。執(zhí)行 get 訪問器相當(dāng)于讀取字段的值。在get 訪問器中,返回值作為屬性值提供給調(diào)用表達(dá)式。以下粗體部分是返回私有字段 m_annualInterestRate 的值的 get 訪問器:Private m_annualInterestRate As Single '/聲明字段 m_annualInterestRatePublic Property AnnualInterestRate() As Sin
43、gle Get Return m_annualInterestRate End Get Set(ByVal Value As Single) m_annualInterestRate = Value End Set End Property當(dāng)引用屬性時,除非該屬性為賦值目標(biāo),否則將調(diào)用 get 訪問器讀取該屬性的值。例如:Dim aLoan As Loan = New Loan .Dim aannualInterestRate As Single = aLoan.AnnualInterestRate ' 調(diào)用get 訪問器。如果類型中包含使用此名稱的聲明,將導(dǎo)致編譯時錯誤。3)Set
44、訪問器set 訪問器相當(dāng)于一個Sub方法,該方法具有單個屬性類型的值參數(shù)以及與包含屬性相同的修飾符(已知屬性名為 P,set 訪問器聲明隱式地使用與該屬性相同的修飾符和參數(shù)列表聲明名為 set_P 的方法)。在set 訪問器中, 新的屬性值通過 Set 訪問器的參數(shù)傳遞。如果聲明一個顯式參數(shù)(該參數(shù)不得有 ByVal 以外的任何修飾),則必須將其聲明為與該屬性相同的數(shù)據(jù)類型。如果不聲明參數(shù),編譯器將使用隱式參數(shù) Value 來表示賦給屬性的新值。set 訪問器隱式具有名為 value 的參數(shù)( value是隱式參數(shù)),此參數(shù)的類型是屬性的類型。以下粗體部分是AnnualInterestRate
45、屬性的Set訪問器聲明: Private m_annualInterestRate As Single '/聲明字段 m_annualInterestRatePublic Property AnnualInterestRate() As Single Get Return m_annualInterestRate End Get Set(ByVal Value As Single) m_annualInterestRate = Value End Set End Property當(dāng)對屬性賦值時,用提供新值的參數(shù)(參數(shù)的值為賦值右邊的值)調(diào)用 Set訪問器。例如,以下語句調(diào)用Annual
46、InterestRate屬性的Set訪問器,將"王飛"傳遞給參數(shù)value,然后Set訪問器中的代碼。Person 1.Name = "王飛" ' 調(diào)用set 訪問器。在 set 訪問器中對局部變量聲明使用隱式參數(shù)名 (value) 是錯誤的。注意:屬性的數(shù)據(jù)類型和訪問性是在 Property 語句中定義,而不是在屬性訪問器中定義。屬性只能有一種數(shù)據(jù)類型和一種可訪問性。例如,不能定義屬性設(shè)置 Decimal 值而獲取 Double 值。屬性按如下方式,根據(jù)所使用的訪問器進(jìn)行分類: l 只帶有 get 訪問器的屬性稱為只讀屬性(此時屬性聲明必須具有
47、ReadOnly 修飾符)。無法對只讀屬性賦值。 l 只帶有 set 訪問器的屬性稱為只寫屬性(此時屬性聲明必須具有WriteOnly 修飾符)。只寫屬性除作為賦值的目標(biāo)外,無法對其進(jìn)行引用。 l 同時帶有 get 和 set 訪問器的屬性為讀寫屬性。 在屬性聲明中,get 和 set 訪問器都必須在屬性體的內(nèi)部聲明。例如:Public Class Loan Private Const MONTHS_IN_YEARS As Integer = 12 'Private years As Integer '/聲明字段 years Private m_months As Intege
48、r '/聲明字段 m_months Private m_annualInterestRate As Single '/聲明字段 m_annualInterestRate ' 聲明屬性Months Public Property Months() As Integer Get Return m_months End Get Set(ByVal Value As Integer) If Value > 0 Then m_months = Value Else m_months = 0 End If End Set End Property '聲明屬性years
49、 Public Property Years() As Integer Get Return m_months / MONTHS_IN_YEARS End Get Set(ByVal Value As Integer) If Value > 0 Then m_months = Value * MONTHS_IN_YEARS Else m_months = 0 End If End Set End Property ' /聲明屬性AnnualInterestRate Public Property AnnualInterestRate() As Single Get Return m_annualInterestRate End Get Set(ByVal Value As Single) m_annualInterestRate = Value End Set End Property. End Class上例中person類聲明了一個公共 AnnualInterestRate 屬性。AnnualInteres
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 區(qū)域活動家長會
- 物聯(lián)網(wǎng)企業(yè)介紹
- 泡沫滅火演練講解
- 大學(xué)生職業(yè)生涯規(guī)劃
- 認(rèn)知與知覺障礙的作業(yè)治療
- 3.4沉淀溶解平衡 同步練習(xí)高二化學(xué)人教版(2019)選擇性必修1
- 初中物理教案課后反思
- 彩虹的盡頭教案反思
- 蝴蝶落我家說課稿
- 汽車美容店加油站施工合同
- 有效教學(xué) 崔允漷 讀書匯報
- 鋁合金模板工程設(shè)計(jì)與施工專項(xiàng)方案技術(shù)交底
- 初中英語詞性講解課件
- 陜西中考物理備考策略課件
- 9F燃機(jī)燃機(jī)規(guī)程
- aiissti變頻器說明書
- 綠化養(yǎng)護(hù)報價表
- 家校溝通案例七篇
- 大學(xué)生心理健康教育論文范文3000字(8篇)
- 新保險法試題
- 退行性腰椎間盤病診療和階梯治療
評論
0/150
提交評論