




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、知識(shí)點(diǎn) 1:引用和值類型總結(jié)從概念上看, 值類型直接存儲(chǔ)其值, 而引用類型存儲(chǔ)對(duì)其值的引用。 這兩種類型存儲(chǔ)在內(nèi)存的不同地方。在C# 中,我們必須在設(shè)計(jì)類型的時(shí)候就決定類型實(shí)例的行為。這種決定非常重要,用 CLR via C# 作者 Jeffrey Richter 的話來(lái) 說(shuō), “不理解引用類型和值類型區(qū)別的程序員將會(huì)給代碼引入詭異的 bug 和性能問(wèn)題( I believe that a developer who misunderstands the difference between reference types and value types will introduce subt
2、le bugs and performance issues into their code.) ” 。這就要求我們正確理解和使用值類型和引用類型。1. 通用類型系統(tǒng)C# 中,變量是值還是引用僅取決于其數(shù)據(jù)類型。C# 的基本數(shù)據(jù)類型都以平臺(tái)無(wú)關(guān)的方式來(lái)定義。C# 的預(yù)定義類型并沒有內(nèi)置于語(yǔ)言中,而是內(nèi)置于 .NET Framework 中。 .NET 使用通用類型系統(tǒng)(CTS) 定義了可以在中間語(yǔ)言 ( IL)中使用的預(yù)定義數(shù)據(jù)類型,所有面向 .NET 的語(yǔ)言都最終被編譯為IL ,即編譯為基于CTS類型的代碼。例如,在 C# 中聲明一個(gè)int 變量時(shí),聲明的實(shí)際上是CTS 中 System.I
3、nt32 的一個(gè)實(shí)例。這具有重要的意義:確保 IL 上的強(qiáng)制類型安全;實(shí)現(xiàn)了不同 .NET 語(yǔ)言的互操作性;所有的數(shù)據(jù)類型都是對(duì)象。它們可以有方法,屬性,等。例如:int i;i = 1;string s;s = i.T oString();MSDN 的這張圖說(shuō)明了 CTS 中各個(gè)類型是如何相關(guān)的。注意,類型的實(shí)例可以只是值類型或自描述類型,即使這些類型有子類別也是如此。2. 值類型C# 的所有值類型均隱式派生自 System.ValueType :結(jié)構(gòu)體: struct (直接派生于 System.ValueType ) ;數(shù)值類型:整 型: sbyte ( System.SByte 的別名
4、), short ( System.Int16 ) , int ( System.Int32 ) , long(System.Int64 ) , byte (System.Byte ) , ushort ( System.UInt16 ) , uint ( System.UInt32 ) ,ulong ( System.UInt64 ) , char ( System.Char ) ;浮點(diǎn)型: float ( System.Single ) , double ( System.Double ) ;用于財(cái)務(wù)計(jì)算的高精度decimal 型: decimal ( System.Decimal ) 。
5、bool 型: bool ( System.Boolean 的別名) ;用戶定義的結(jié)構(gòu)體(派生于System.ValueType ) 。枚舉: enum (派生于 System.Enum ) ;可空類型(派生于System.Nullable<T>泛型結(jié)構(gòu)體,T?實(shí)際上是 System.Nullable<T>的別名) 。每種值類型均有一個(gè)隱式的默認(rèn)構(gòu)造函數(shù)來(lái)初始化該類型的默認(rèn)值。例如:int i = new int();等價(jià)于:Int32 i = new Int32();等價(jià)于:int i = 0;等價(jià)于:Int32 i = 0;使用 new 運(yùn)算符時(shí),將調(diào)用特定類型的默
6、認(rèn)構(gòu)造函數(shù)并對(duì)變量賦以默認(rèn)值。在上例中,默認(rèn)構(gòu)造函數(shù)將值0 賦給了 i 。 MSDN 上有完整的默認(rèn)值表。關(guān)于 int 和 Int32 的細(xì)節(jié),在我的另一篇文章中有詳細(xì)解釋: 理解 C# 中的 System.Int32和 int 。所有的值類型都是密封( seal )的,所以無(wú)法派生出新的值類型。值得注意的是, System.ValueType 直接派生于 System.Object 。 即 System.ValueType 本身是一個(gè)類類型,而不是值類型。其關(guān)鍵在于ValueType 重寫了 Equals() 方法,從而對(duì)值類型按照實(shí)例的值來(lái)比較,而不是引用地址來(lái)比較??梢杂肨ype.IsV
7、alueType 屬性來(lái)判斷一個(gè)類型是否為值類型:復(fù)制代碼 代碼如下 :TestType testType = new TestType ();if (testTypetype.GetType().IsValueType)Console.WriteLine("0 is value type.", testType.T oString();3. 引用類型C# 有以下一些引用類型:數(shù)組(派生于System.Array ) 用戶用定義的以下類型:類: class (派生于 System.Object ) ;接口: interface (接口不是一個(gè)“東西” ,所以不存在派生于何處
8、的問(wèn)題。 Anders 在 C#Programming Language 中說(shuō),接口只是表示一種約定 contract ) ;委托: delegate (派生于 System.Delegate ) 。object( System.Object 的別名);字符串: string ( System.String的別名)??梢钥闯觯阂妙愋团c值類型相同的是,結(jié)構(gòu)體也可以實(shí)現(xiàn)接口;引用類型可以派生出新的類型,而值類型不能;引用類型可以包含 null 值,值類型不能(可空類型功能允許將null 賦給值類型) ;引用類型變量的賦值只復(fù)制對(duì)對(duì)象的引用, 而不復(fù)制對(duì)象本身。 而將一個(gè)值類型變量賦給另一個(gè)值類型
9、變量時(shí),將復(fù)制包含的值。對(duì)于最后一條,經(jīng)?;煜氖莝tring 。我曾經(jīng)在一本書的一個(gè)早期版本上看到 String 變量比 string 變量效率高;我還經(jīng)常聽說(shuō) String 是引用類型, string 是值類型,等等。例如:string s1 = "Hello, "string s2 = "world!"string s3 = s1 + s2;/s3 is "Hello, world!"這確實(shí)看起來(lái)像一個(gè)值類型的賦值。再如:string s1 = "a"string s2 = s1;s1 = "b&q
10、uot;/s2 is still "a"改變 s1 的值對(duì) s2 沒有影響。這更使string 看起來(lái)像值類型。實(shí)際上,這是運(yùn)算符重載的結(jié)果,當(dāng) s1 被改變時(shí), .NET 在托管堆上為 s1 重新分配了內(nèi)存。這樣的目的,是為了將做為引用類型的 string 實(shí)現(xiàn)為通常語(yǔ)義下的字符串。4. 總結(jié)C# 中,變量是值還是引用僅取決于其數(shù)據(jù)類型。C# 的值類型包括:結(jié)構(gòu)體(數(shù)值類型, bool 型,用戶定義的結(jié)構(gòu)體) ,枚舉,可空類型。C# 的引用類型包括:數(shù)組,用戶定義的類、接口、委托, object ,字符串。數(shù)組的元素,不管是引用類型還是值類型,都存儲(chǔ)在托管堆上。引用類型在
11、棧中存儲(chǔ)一個(gè)引用, 其實(shí)際的存儲(chǔ)位置位于托管堆。 為了方便, 本文簡(jiǎn)稱引用類型部署在托管推上。值類型總是分配在它聲明的地方:作為字段時(shí),跟隨其所屬的變量(實(shí)例)存儲(chǔ);作為局部變量時(shí),存儲(chǔ)在棧上。值類型在內(nèi)存管理方面具有更好的效率, 并且不支持多態(tài), 適合用作存儲(chǔ)數(shù)據(jù)的載體; 引用類型支持多態(tài),適合用于定義應(yīng)用程序的行為。應(yīng)該盡可能地將值類型實(shí)現(xiàn)為具有常量性和原子性的類型。應(yīng)該盡可能地確保0 為值類型的有效狀態(tài)。應(yīng)該盡可能地減少裝箱和拆箱。知識(shí)點(diǎn) 2 :封裝可以把程序按某種規(guī)則分成很多 “塊 “,塊與塊之間可能會(huì)有聯(lián)系, 每個(gè)塊都有一個(gè)可變部分和一個(gè)穩(wěn)定的部分。 我們需要把可變的部分和穩(wěn)定的部分
12、分離出來(lái), 將穩(wěn)定的部分暴露給其他塊,而將可變的部分隱藏起來(lái),以便于隨時(shí)可以讓它修改。這項(xiàng)工作就是封裝。例如: 在用類實(shí)現(xiàn)某個(gè)邏輯的時(shí)候, 類就是以上所說(shuō)的塊, 實(shí)現(xiàn)功能的具體代碼就是可變的部分,而 public 的方法或者屬性則是穩(wěn)定的部分。封裝的意義封裝的意義在于保護(hù)或者防止代碼 (數(shù)據(jù)) 被我們無(wú)意中破壞。 在面向?qū)ο蟪绦蛟O(shè)計(jì)中數(shù)據(jù)被看作是一個(gè)中心的原素并且和使用它的函數(shù)結(jié)合的很密切, 從而保護(hù)它不被其它的函數(shù)意外的修改。封裝提供了一個(gè)有效的途徑來(lái)保護(hù)數(shù)據(jù)不被意外的破壞。 相比我們將數(shù)據(jù) (用域來(lái)實(shí)現(xiàn)) 在程序中定義為公用的( public )我們將它們(fields) 定義為私有的(
13、private )在很多方面會(huì)更好。私有的數(shù)據(jù)可以用兩種方式來(lái)間接的控制。下面我們看一些c# 例子來(lái)學(xué)習(xí)這兩種方法用以封裝數(shù)據(jù)。 第一種方法, 我們使用傳統(tǒng)的存、 取方法。 第二種方法我們用屬性( property ) 。無(wú)論我們使用哪種的方法, 我們的目標(biāo)是在使用數(shù)據(jù)的同時(shí)不能使它受到任何的破壞和改變。有如下好處1 、使用者只需要了解如何通過(guò)類的接口使用類,而不用關(guān)心類的內(nèi)部數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)組織方法。2 、高內(nèi)聚,低耦合一直是我們所追求的,用好封裝恰恰可以減少耦合3 、只要對(duì)外接口不改變,可以任意修改內(nèi)部實(shí)現(xiàn),這個(gè)可以很好的應(yīng)對(duì)變化4 、類具有了簡(jiǎn)潔清晰的對(duì)外接口,降低了使用者的學(xué)習(xí)過(guò)程用傳統(tǒng)
14、的讀、寫方法封裝讓 我們來(lái)看一 個(gè)例子有 一個(gè)類 Grade ( 年級(jí) 信息類 ) ,為 了操 縱這個(gè)類 中 的數(shù)據(jù)( stringgradeName (年級(jí)名稱) )我們定義了一個(gè)讀方法和一個(gè)寫方法。using system;public class Gradeprivate string gradeName;/ 讀方法public string GetGradeName()return gradeName;/ 寫方法public void SetGradeName(string gradeName)this.gradeName=gradeName;通過(guò)上面的方法, 我們可以保護(hù)私有數(shù)據(jù)不被
15、外部程序所破壞。 現(xiàn)在我們使用兩個(gè)不同的方法來(lái)寫和讀數(shù)據(jù)public staticvoid Main(string args)Grade grade = new Grade();grade.SetGradeName("S2")Console.WriteLine("TheGrade is :"+grade.GetGradeName();在 上 面 的 例 子 中 , 我 們 不 能直接 訪 問(wèn) 類 Grade 的 實(shí) 例 grade 中 的 私 有數(shù) 據(jù) (stringgradeName) ,我們只能通過(guò)這兩個(gè)方法來(lái)訪問(wèn)。用屬性來(lái)實(shí)現(xiàn)封裝屬性是 c# 引入
16、的一種語(yǔ)言成分,只有很少的語(yǔ)言支持屬性。通過(guò)對(duì)屬性的讀和寫來(lái)保護(hù)類中的域。第一種方法體身也是一種好的方式,但用屬性來(lái)實(shí)現(xiàn)封裝會(huì)更方便?,F(xiàn)在我們來(lái)看一個(gè)例子:using system;public class Gradeprivate string gradeName;public string GradeNamegetreturn gradeName;setgradeName =value;public static void Main(string args)Grade grade= newGrade ();grade.GradeName="S2"Console.Writ
17、eLine("TheGrade is :0",grade.GradeName);通過(guò)上面的例子,我們可以看到如何通過(guò)屬性來(lái)實(shí)現(xiàn)封裝。屬性具有兩種操作get 和 set 。get 用來(lái)返回屬性域的值。 set 通過(guò) value 這個(gè)變量來(lái)給屬性域賦值。屬性可以設(shè)為只讀的(read-only) 。這只需屬性只具有一個(gè)set 操作。只讀屬性public string GradeNamegetreturn gradeName;在上 面的例子中 我們看到了 如何來(lái)實(shí)現(xiàn)一個(gè)只讀的 屬性。 類 Grade 擁有 一個(gè)GradeName 屬性只實(shí)現(xiàn)了 get 操作。它省略了寫操作。這個(gè)特別
18、的類擁有一個(gè)構(gòu)造器,用來(lái)接受一個(gè)字符串變量。在Main 方法創(chuàng)建了一個(gè)新的對(duì)象grade 。對(duì)象 grade 的實(shí)例使用了類 Grade 帶有一個(gè)字符串參數(shù)的構(gòu)造器。因?yàn)樯厦娴膶傩允侵蛔x的,所以我們不給域 gradeName 賦值并且我們只側(cè)讀取此域中的值。 當(dāng)然屬性也可以是只寫的 ( write-only ) ,這只需屬性只具有一個(gè)get 操作。public string GradeNamesetthis.gradeName = value;在上 面的例子中 我們看到了 如何來(lái)實(shí)現(xiàn)一個(gè)只寫的 屬性。 類 Grade 擁有 一個(gè)GradeName 屬性只實(shí)現(xiàn)了 set 操作。它省略了讀操作???/p>
19、結(jié)封裝是朝著面向?qū)ο蟪绦蛟O(shè)計(jì)邁出的第一步。 本文主要展示了一些封裝的知識(shí)。 用傳統(tǒng)的讀、 寫兩種方法可以實(shí)現(xiàn)封裝, 另一種實(shí)現(xiàn)封裝的方法是使用屬性。 使用屬性的好處在于對(duì)象的使用者可以用一條語(yǔ)句來(lái)操作內(nèi)部的數(shù)據(jù)知識(shí)點(diǎn) 3 :繼承1、 繼承的定義二、為了提高軟件模塊的可復(fù)用性和可擴(kuò)充性, 以便提高軟件的開發(fā)效率, 我們總是希望能夠利用前人或自己以前的開發(fā)成果, 同時(shí)又希望在自己的開發(fā)過(guò)程中能夠有足夠的靈活性,不拘泥于復(fù)用的模塊。 C# 這種完全面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言提供了兩個(gè)重要的特性-繼承性 inheritance 和多態(tài)性 polymorphism 。繼承是面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特征之一,
20、它可以讓您重用代碼, 可以節(jié)省程序設(shè)計(jì)的時(shí)間。 繼承就是在類之間建立一種相交關(guān)系, 使得新定義的派生類的實(shí)例可以繼承已有的基類的特征和能力,而且可以加入新的特性或者是修改已有的特性建立起類的新層次?,F(xiàn)實(shí)世界中的許多實(shí)體之間不是相互孤立的, 它們往往具有共同的特征也存在內(nèi)在的差別。人們可以采用層次結(jié)構(gòu)來(lái)描述這些實(shí)體之間的相似之處和不同之處。為了用軟件語(yǔ)言對(duì)現(xiàn)實(shí)世界中的層次結(jié)構(gòu)進(jìn)行模型化, 面向?qū)ο蟮某绦蛟O(shè)計(jì)技術(shù)引入了繼承的概念。 一個(gè)類從另一個(gè)類派生出來(lái)時(shí), 派生類從基類那里繼承特性。 派生類也可以作為其它類的基類。從一個(gè)基類派生出來(lái)的多層類形成了類的層次結(jié)構(gòu)。注意: C# 中,派生類只能從一個(gè)
21、類中繼承。這是因?yàn)?,在C+ 中,人們?cè)诖蠖鄶?shù)情況下不需要一個(gè)從多個(gè)類中派生的類。從多個(gè)基類中派生一個(gè)類這往往會(huì)帶來(lái)許多問(wèn)題,從而抵消了這種靈活性帶來(lái)的優(yōu)勢(shì)。C# 中,派生類從它的直接基類中繼承成員:方法、域、屬性、事件、索引指示器。除了構(gòu)造函數(shù)和析構(gòu)函數(shù),派生類隱式地繼承了直接基類的所有成員2、 C# 中的繼承符合下列規(guī)則:1 、 繼承是可傳遞的。 如果 C 從 B 中派生, B 又從 A 中派生, 那么 C 不僅繼承了 B中聲明的成員,同樣也繼承了 A 中的成員。 Object 類作為所有類的基類。2 、派生類應(yīng)當(dāng)是對(duì)基類的擴(kuò)展。派生類可以添加新的成員,但不能除去已經(jīng)繼承的成員的定義。3 、
22、構(gòu)造函數(shù)和析構(gòu)函數(shù)不能被繼承。除此以外的其它成員,不論對(duì)它們定義了怎樣的訪問(wèn)方式,都能被繼承。基類中成員的訪問(wèn)方式只能決定派生類能否訪問(wèn)它們。4 、 派生類如果定義了與繼承而來(lái)的成員同名的新成員, 就可以覆蓋已繼承的成員。但這并不因?yàn)檫@派生類刪除了這些成員,只是不能再訪問(wèn)這些成員。5 、 類可以定義虛方法、 虛屬性以及虛索引指示器, 它的派生類能夠重載這些成員,從而實(shí)現(xiàn)類可以展示出多態(tài)性。6 、派生類只能從一個(gè)類中繼承,可以通過(guò)接呂實(shí)現(xiàn)多重繼承。下面的代碼是一個(gè)子類繼承父類的例子:3、 . 訪問(wèn)與隱藏基類成員(1) 訪問(wèn)基類成員通過(guò) base 關(guān)鍵字訪問(wèn)基類的成員:調(diào)用基類上已被其他方法重寫的
23、方法。指定創(chuàng)建派生類實(shí)例時(shí)應(yīng)調(diào)用的基類構(gòu)造函數(shù)?;愒L問(wèn)只能在構(gòu)造函數(shù)、實(shí)例方法或?qū)嵗龑傩栽L問(wèn)器中進(jìn)行。從靜態(tài)方法中使用 base 關(guān)鍵字是錯(cuò)誤的。(2) 隱藏基類成員想想看, 如果所有的類都可以被繼承, 繼承的濫用會(huì)帶來(lái)什么后果?類的層次結(jié)構(gòu)體系將變得十分龐, 大類之間的關(guān)系雜亂無(wú)章, 對(duì)類的理解和使用都會(huì)變得十分困難。 有時(shí)候,我們并不希望自己編寫的類被繼承。另一些時(shí)候,有的類已經(jīng)沒有再被繼承的必要。C#提出了一個(gè)密封類(sealed class )的概念,幫助開發(fā)人員來(lái)解決這一問(wèn)題。密封類在聲明中使用 sealed 修飾符, 這樣就可以防止該類被其它類繼承。 如果試圖將一個(gè)密封類作為其它
24、類的基類, C# 將提示出錯(cuò)。理所當(dāng)然,密封類不能同時(shí)又是抽象類,因?yàn)槌橄罂偸窍M焕^承的。在哪些場(chǎng)合下使用密封類呢?密封類可以阻止其它程序員在無(wú)意中繼承該類。 而且密封類可以起到運(yùn)行時(shí)優(yōu)化的效果。 實(shí)際上, 密封類中不可能有派生類。 如果密封類實(shí)例中存在虛成員函數(shù),該成員函數(shù)可以轉(zhuǎn)化為非虛的,函數(shù)修飾符virtual 不再生效。(3) 密封方法我們已經(jīng)知道,使用密封類可以防止對(duì)類的繼承。C#還提出了密封方法( sealedmethod ) 的概念,以防止在方法所在類的派生類中對(duì)該方法的重載。對(duì)方法可以使用 sealed 修飾符,這時(shí)我們稱該方法是一個(gè)密封方法。不是類的每個(gè)成員方法都可以作為密
25、封方法密封方法, 必須對(duì)基類的虛方法進(jìn)行重載,提供具體的實(shí)現(xiàn)方法。所以,在方法的聲明中, sealed 修飾符總是和override 修飾符同時(shí)使用。(4) 使用 new 修飾符隱藏基類成員使用 new 修飾符可以顯式隱藏從基類繼承的成員。 若要隱藏繼承的成員, 請(qǐng)使用相同名稱在派生類中聲明該成員,并用 new 修飾符修飾它。通過(guò)繼承隱藏名稱采用下列形式之一:a、引入類或結(jié)構(gòu)中的常數(shù)、指定、屬性或類型隱藏具有相同名稱的所有基類成員。b 、引入類或結(jié)構(gòu)中的方法隱藏基類中具有相同名稱的屬性、字段和類型。同時(shí)也隱藏具有相同簽名的所有基類方法。c、引入類或結(jié)構(gòu)中的索引器將隱藏具有相同名稱的所有基類索引
26、器。注意:在同一成員上同時(shí)使用 new 和 override 是錯(cuò)誤的。同時(shí)使用 new 和virtual 可保證一個(gè)新的專用化點(diǎn)。在不隱藏繼承成員的聲明中使用 new 修飾符將發(fā)出警告。四、多級(jí)繼承一些面向?qū)ο笳Z(yǔ)言允許一個(gè)類從多個(gè)基類中繼承, 而另一些面向?qū)ο笳Z(yǔ)言只允許從一個(gè)類繼承,但可以隨意從幾個(gè)接口或純抽象類中繼承。只有 C+ 支持多級(jí)繼承,許多程序員對(duì)此褒貶不一。多級(jí)繼承常會(huì)引起繼承來(lái)的類之間的混亂, 繼承而來(lái)的方法往往沒有唯一性, 所以 C# 中類的繼承只可以是一個(gè),即子類只能派生于一個(gè)父類, 而有時(shí)你必須繼承多個(gè)類的特性, 為了實(shí)現(xiàn)多重繼承必須使用接口技術(shù)。五、繼承與訪問(wèn)修飾符訪問(wèn)
27、修飾符是一些關(guān)鍵字, 用于指定聲明的成員或類型的可訪問(wèn)性。 類的繼承中有四個(gè)訪問(wèn)修飾符: public protected internal private 。使用這些訪問(wèn)修飾符可指定下列五個(gè)可訪問(wèn)性級(jí)別: public protected internal internal protected private。聲明的可訪問(wèn)性意義public訪問(wèn)不受限制。protected訪問(wèn)僅限于包含類或從包含類派生的類型。internal訪問(wèn)僅限于當(dāng)前項(xiàng)目。protected internal訪問(wèn)僅限于從包含類派生的當(dāng)前項(xiàng)目或類型。private訪問(wèn)僅限于包含類型。1、繼承中關(guān)于可訪問(wèn)域的一些問(wèn)題基類的所
28、有成員(實(shí)例構(gòu)造函數(shù)、析構(gòu)函數(shù)和靜態(tài)構(gòu)造函數(shù)除外)都由派生類型繼承。這甚至包括基類的私有成員。但是,私有成員的可訪問(wèn)域只包括聲明該成員的類型的程序文本。2、繼承中關(guān)于屬性的一些問(wèn)題和類的成員方法一樣, 我們也可以定義屬性的重載、虛屬性、抽象屬性以及密封屬性的概念。與類和方法一樣,屬性的修飾也應(yīng)符合下列規(guī)則:屬性的重載1 .在派生類中使用修飾符的屬性,表示對(duì)基類中的同名屬性進(jìn)行重載。2 .在重載的聲明中,屬性的名稱、類型、訪問(wèn)修飾符都應(yīng)該與基類中被繼承的屬 性一致。3 .如果基類的屬性只有一個(gè)屬性訪問(wèn)器,重載后的屬性也應(yīng)只有一個(gè)。但如果基類的屬性同時(shí)包含 get和set屬性訪問(wèn)器,重載后的屬性可以只有一個(gè),也可以同時(shí)有兩 個(gè)屬性訪問(wèn)器。而只是注意: 與方法重載不同的是, 屬性的重載聲明實(shí)際上并沒有聲明新的屬性,為已有的虛屬性提供訪問(wèn)器的具體實(shí)現(xiàn)。虛屬性1. 使用 virtual 修飾符聲明的屬性為虛屬性。2. 虛屬性的訪問(wèn)器包括get 訪問(wèn)器和 set 訪問(wèn)器,同樣也是虛的。抽象屬性1. 使用 abstract 修飾符聲明的屬性為抽象屬性。2. 抽
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 合同范本:貨運(yùn)車輛租賃標(biāo)準(zhǔn)
- 2024年二月車位轉(zhuǎn)讓協(xié)議附屬設(shè)施驗(yàn)收標(biāo)準(zhǔn)補(bǔ)充版
- 藥品代理銷售合同模板范本
- 智能家居安裝合同詳細(xì)范文
- 無(wú)限連帶責(zé)任擔(dān)保合同示范文本
- 化工制圖與識(shí)圖測(cè)試題(附答案)
- 新工程承包合同
- 睪丸扭轉(zhuǎn)病人護(hù)理
- 鋁合金門窗采購(gòu)合同范文正規(guī)范本
- 合同糾紛處理物業(yè)服務(wù)中心
- 六年級(jí)語(yǔ)文下冊(cè)第四單元綜合性學(xué)習(xí):開展閱讀分享會(huì)課件
- 江蘇省連云港市贛榆智賢高中20222023學(xué)年高一下學(xué)期3月階段檢測(cè)語(yǔ)文試題(解析)
- 《疼痛治療》課件
- 井下電纜及其連接裝置
- “少兒好舞蹈”大賽活動(dòng)報(bào)名表
- 復(fù)地A2A3附著式升降腳手架施工方案濟(jì)南復(fù)星國(guó)際中心A2A3地塊總承包工程
- 節(jié)前安全檢查表
- 動(dòng)物防疫與檢疫技術(shù)教案
- 英語(yǔ)中考復(fù)習(xí)研討課Problemsandadvice
- 頻譜儀N9020A常用功能使用指南
- 電氣自動(dòng)化設(shè)備安裝與維修專業(yè)(預(yù)備技師)人才培養(yǎng)方案(含一體化課程標(biāo)準(zhǔn))
評(píng)論
0/150
提交評(píng)論