初始化和類裝載

在許多傳統語言裡,程式都是作為啟動過程的一部分一次性載入的。隨後進行的是初始化,再是正式執行程式。在這些語言中,必須對初始化過程進行謹慎的控制,保證static資料的初始化不會帶來麻煩。比如在一個static資料獲得初始化之前,就有另一個static資料希望它是一個有效值,那麼在C++中就會造成問題。Java則沒有這樣的問題,因為它採用了不同的裝載方法。由於Java中的一切東西都是對象,所以許多活動變得更加簡單,這個問題便是其中的一例。正如下一章會講到的那樣,每個對象的代碼都存在於獨立的檔案中。

到底選擇合成還是繼承

無論合成還是繼承,都允許我們將子物件置於自己的新類中。大家或許會奇怪兩者間的差異,以及到底該如何選擇。如果想利用新類內部一個現有類的特性,而不想使用它的介面,通常應選擇合成。也就是說,我們可嵌入一個對象,使自己能用它實現新類的特性。但新類的使用者會看到我們已定義的介面,而不是來自內嵌物件的介面。考慮到這種效果,我們需在新類裡嵌入現有類的private對象。有些時候,我們想讓類使用者直接存取新類的合成。也就是說,需要將成員對象的屬性變為public。成員對象會將自身隱藏起來,所以這是一種安全的做法

關於Lambda運算式

Lambda運算式是C#3.0的一種新文法,文法簡潔為編寫匿名方法提供了更簡明的函數式的句法.我通過一個樣本來說明Lambda運算式的原理:Lambda運算式和匿名方法都來源於委託我們來看看委託的使用在C#1.0時: 1using System;  2using System.Collections.Generic;  3using System.Linq;  4using System.Text;  5  6namespace ConsoleApplication3  7{  8   

擴充方法(2) GridView儲存格合并

大家GridView都用的比較多吧..有沒遇到儲存格需要合并的需求..儲存格合并原理其實很簡單,就是逐行判斷要合并的儲存格裡的值是否和上一行的相同,要是相同的 話就合并,不同的話就接著判斷我們可以通過擴充方法為GridView添加單元合并 public static class GridViewExtensions     {         /// <summary>         ///  GridView行合并         /// </summary>    

.NET 3.x新特性之Lambda運算式

隨著歲月的流逝,VS也從2005慢慢的步入2008,.NET也將進入3.5版本,學習的腳步也要慢慢趕上。今天我們來看看C#3.0的又一特性Lambda運算式,它由2.0代理演化而來,也是為LinQ做好必要的準備。Lambda運算式首先我們要知道他的運算子“=>”,在我以前的一篇文章中可以得到在不同版本中所使用代理和通過Lambda運算式的一個例子,你可以在這裡看到:[C#3.0]新特性概覽.今天我們舉個另外的例子,讓我們更好的理解這個Lambda運算式,因為我們在L

開發.NET程式注意事項

(1)不要在解構函式中.Close()資料層。(2)盡量不要使用複雜的清單控制項,太大,按照需求來,在.NET中,注重的是控制項編程,就是非字串輸出的編程,衍生的就是時間,委託等,很多時候,繼承IX介面編寫自己的,這樣可能更適合。(3)using System;public sealed class Singleton{private static volatile Singleton instance;private static object syncRoot = new Object();

違例自變數

和Java的其他任何對象一樣,需要用new在記憶體堆裡建立違例,並需調用一個構建器。在所有標準違例中,存在著兩個構建器:第一個是預設構建器,第二個則需使用一個字串自變數,使我們能在違例裡置入相關資訊:if(t == null)throw new NullPointerException("t =

違例差錯控制

Java的基本原理就是“形式錯誤的代碼不會運行”。與C++類似,捕獲錯誤最理想的是在編譯期間,最好在試圖運行程式以前。然而,並非所有錯誤都能在編譯期間偵測到。有些問題必須在運行期間解決,讓錯誤的締結者通過一些手續向接收者傳遞一些適當的資訊,使其知道該如何正確地處理遇到的問題。在C++和其他早期語言中,可通過幾種手續來達到這個目的。而且它們通常是作為一種規定建立起來的,而非作為程式設計語言的一部分。典型地,我們需要返回一個值或設定一個標誌(位),接收者會檢查這些值或標誌,判

主類型的過載

主(資料)類型能從一個“較小”的類型自動轉變成一個“較大”的類型。涉及過載問題時,這會稍微造成一些混亂。下面這個例子揭示了將主類型傳遞給過載的方法時發生的情況: //: PrimitiveOverloading.java// Promotion of primitives and overloadingpublic class PrimitiveOverloading { // boolean can't be

區分過載方法

若方法有同樣的名字,Java怎樣知道我們指的哪一個方法呢?這裡有一個簡單的規則:每個過載的方法都必須採取獨一無二的自變數類型列表。若稍微思考幾秒鐘,就會想到這樣一個問題:除根據自變數的類型,程式員如何區分兩個同名方法的差異呢?即使自變數的順序也足夠我們區分兩個方法(儘管我們通常不願意採用這種方法,因為它會產生難以維護的代碼): //: OverloadingOrder.java// Overloading based on the order of// the

Collections類中的工具 + 生產力

Collections類中含有其他大量有用的工具 + 生產力(如表二):enumeration(Collection) 為自變數產生原始風格的Enumeration(枚舉)max(Collection),min(Collection) 在自變數中用集合內對象的自然比較方法產生最大或最小元素max(Collection,Comparator),min(Collection,Comparator) 在集合內用比較子產生最大或最小元素nCopies(int n, Object o)

[你必須知道的.NET] 第三回:曆史糾葛:特性和屬性

1. 引言attribute是.NET架構引入的有一技術亮點,因此我們有必要花點時間走進一個發現attribute登堂入室的入口。因為.NET

如何?捷徑中的尋找目標功能

最近寫一個開發協助工具輔助,在這個過程要做一個類似檔案捷徑中尋找目 標的功能,先查MSDN98,大家不要見笑,我現在一直都用它,沒有相應的API, 後又. Net 2003中的MSDN,找到了可以實現該功能的API, SHOpenFolderAndSelectItems()函數,它的原型如下:(具體用法參考 MSDN)“Opens a Microsoft® Windows® Explorer window with specified items in a

在衍生類別中對虛方法進行重載

先讓我們回顧一下普通的方法重載。普通的方法重載指的是:類中兩個以上的方法(包括隱藏的繼承而來的方法),取的名字相同,只要使用的參數類型或者參數個數不同,編譯器便知道在何種情況下應該調用哪個方法。而對基類虛方法的重載是函數重載的另一種特殊形式。在衍生類別中重新定義此虛函數時,要求的是方法名稱、傳回值類型、參數表中的參數個數、類型、順序都必須與基類中的虛函數完全一致。在衍生類別中聲明對虛方法的重載,要求在聲明中加上override關鍵字,而且不能有new,static或virtual修飾符。還是讓我

MFC Activex錄音機控制項

上一次的程式示範了怎樣做一個錄音機的程式,不過我的主要目的是要做一個能嵌入網、Director、authorware 等應用軟體的ActiveX 控制項,下面就來看以下基本實現方法。程式運行結果如下:圖一為簡單起見,本控制項沒有設定介面、屬性、方法等等,基本的程式思路跟上一篇的類似,大家看源碼,就曉得了。一個重要的心得就是,ActiveX

ATL布幔之下的秘密(4)

介紹到現在為止,我們還沒有討論過任何有關組合語言的東西。但是 如果我們真的要瞭解ATL底層內幕的話,就不能迴避這一話題,因為ATL使用了一 些底層的技術以及一些內聯組合語言來使它更小巧快速。在這裡,我假設讀者已 經擁有了組合語言的基礎知識,所以我只會集中於我的主題,而不會再另外寫一 份組合語言的教程。如果你尚未足夠瞭解組合語言,那麼我建議你看一看Matt Pietrek於1998年2月發表在Microsoft System Journal的文章《Under The Hood

如何在NT下擷取進程的路徑

一:擷取NT下進程路徑的方法在Win9X系統中,利用ToolHelp

對象的容納

“如果一個程式只含有數量固定的對象,而且已知它們的存在時間,那麼這個程式可以說是相當簡單的。”通常,我們的程式需要根據程式運行時才知道的一些標準建立新對象。若非程式正式運行,否則我們根本不知道自己到底需要多少數量的對象,甚至不知道它們的準確類型。為了滿足常規編程的需要,我們要求能在任何時候、任何地點建立任意數量的對象。所以不可依賴一個已命名的控制代碼來容納自己的每一個對象,就象下面這樣:MyObject

通過繼承進行設計

學習了多型的知識後,由於多型是如此“聰明”的一種工具,所以看起來似乎所有東西都應該繼承。但假如過度使用繼承技術,也會使自己的設計變得不必要地複雜起來。事實上,當我們以一個現成類為基礎建立一個新類時,如首先選擇繼承,會使情況變得異常複雜。一個更好的思路是首先選擇“合成”——如果不能十分確定自己應使用哪一個。合成不會強迫我們的程式設計進入繼承的分級結構中。同時,合成顯得更加靈活,因為可以動態選擇一種類型(以及行為),而繼承要求在

在RESTful應用程式中的超媒體

超媒體到底是什嗎?!如果你有幸聽說過REST架構風格,那麼你也可能聽說某些人認為統一介面是最重要的約束,尤其是該介面在制約資源上能被調用的方法方面。但是,你沒有意識到的是,對於統一介面還有很多東西。特別是一個被笨拙地冠以“超媒體即應用狀態引擎(hypermedia as the engine of application

總頁數: 61357 1 .... 27209 27210 27211 27212 27213 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.