Time of Update: 2017-02-27
在許多傳統語言裡,程式都是作為啟動過程的一部分一次性載入的。隨後進行的是初始化,再是正式執行程式。在這些語言中,必須對初始化過程進行謹慎的控制,保證static資料的初始化不會帶來麻煩。比如在一個static資料獲得初始化之前,就有另一個static資料希望它是一個有效值,那麼在C++中就會造成問題。Java則沒有這樣的問題,因為它採用了不同的裝載方法。由於Java中的一切東西都是對象,所以許多活動變得更加簡單,這個問題便是其中的一例。正如下一章會講到的那樣,每個對象的代碼都存在於獨立的檔案中。
Time of Update: 2017-02-27
無論合成還是繼承,都允許我們將子物件置於自己的新類中。大家或許會奇怪兩者間的差異,以及到底該如何選擇。如果想利用新類內部一個現有類的特性,而不想使用它的介面,通常應選擇合成。也就是說,我們可嵌入一個對象,使自己能用它實現新類的特性。但新類的使用者會看到我們已定義的介面,而不是來自內嵌物件的介面。考慮到這種效果,我們需在新類裡嵌入現有類的private對象。有些時候,我們想讓類使用者直接存取新類的合成。也就是說,需要將成員對象的屬性變為public。成員對象會將自身隱藏起來,所以這是一種安全的做法
Time of Update: 2017-02-27
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
Time of Update: 2017-02-27
大家GridView都用的比較多吧..有沒遇到儲存格需要合并的需求..儲存格合并原理其實很簡單,就是逐行判斷要合并的儲存格裡的值是否和上一行的相同,要是相同的 話就合并,不同的話就接著判斷我們可以通過擴充方法為GridView添加單元合并 public static class GridViewExtensions { /// <summary> /// GridView行合并 /// </summary>
Time of Update: 2017-02-27
隨著歲月的流逝,VS也從2005慢慢的步入2008,.NET也將進入3.5版本,學習的腳步也要慢慢趕上。今天我們來看看C#3.0的又一特性Lambda運算式,它由2.0代理演化而來,也是為LinQ做好必要的準備。Lambda運算式首先我們要知道他的運算子“=>”,在我以前的一篇文章中可以得到在不同版本中所使用代理和通過Lambda運算式的一個例子,你可以在這裡看到:[C#3.0]新特性概覽.今天我們舉個另外的例子,讓我們更好的理解這個Lambda運算式,因為我們在L
Time of Update: 2017-02-27
(1)不要在解構函式中.Close()資料層。(2)盡量不要使用複雜的清單控制項,太大,按照需求來,在.NET中,注重的是控制項編程,就是非字串輸出的編程,衍生的就是時間,委託等,很多時候,繼承IX介面編寫自己的,這樣可能更適合。(3)using System;public sealed class Singleton{private static volatile Singleton instance;private static object syncRoot = new Object();
Time of Update: 2017-02-27
和Java的其他任何對象一樣,需要用new在記憶體堆裡建立違例,並需調用一個構建器。在所有標準違例中,存在著兩個構建器:第一個是預設構建器,第二個則需使用一個字串自變數,使我們能在違例裡置入相關資訊:if(t == null)throw new NullPointerException("t =
Time of Update: 2017-02-27
Java的基本原理就是“形式錯誤的代碼不會運行”。與C++類似,捕獲錯誤最理想的是在編譯期間,最好在試圖運行程式以前。然而,並非所有錯誤都能在編譯期間偵測到。有些問題必須在運行期間解決,讓錯誤的締結者通過一些手續向接收者傳遞一些適當的資訊,使其知道該如何正確地處理遇到的問題。在C++和其他早期語言中,可通過幾種手續來達到這個目的。而且它們通常是作為一種規定建立起來的,而非作為程式設計語言的一部分。典型地,我們需要返回一個值或設定一個標誌(位),接收者會檢查這些值或標誌,判
Time of Update: 2017-02-27
主(資料)類型能從一個“較小”的類型自動轉變成一個“較大”的類型。涉及過載問題時,這會稍微造成一些混亂。下面這個例子揭示了將主類型傳遞給過載的方法時發生的情況: //: PrimitiveOverloading.java// Promotion of primitives and overloadingpublic class PrimitiveOverloading { // boolean can't be
Time of Update: 2017-02-27
若方法有同樣的名字,Java怎樣知道我們指的哪一個方法呢?這裡有一個簡單的規則:每個過載的方法都必須採取獨一無二的自變數類型列表。若稍微思考幾秒鐘,就會想到這樣一個問題:除根據自變數的類型,程式員如何區分兩個同名方法的差異呢?即使自變數的順序也足夠我們區分兩個方法(儘管我們通常不願意採用這種方法,因為它會產生難以維護的代碼): //: OverloadingOrder.java// Overloading based on the order of// the
Time of Update: 2017-02-27
Collections類中含有其他大量有用的工具 + 生產力(如表二):enumeration(Collection) 為自變數產生原始風格的Enumeration(枚舉)max(Collection),min(Collection) 在自變數中用集合內對象的自然比較方法產生最大或最小元素max(Collection,Comparator),min(Collection,Comparator) 在集合內用比較子產生最大或最小元素nCopies(int n, Object o)
Time of Update: 2017-02-27
1. 引言attribute是.NET架構引入的有一技術亮點,因此我們有必要花點時間走進一個發現attribute登堂入室的入口。因為.NET
Time of Update: 2017-02-27
最近寫一個開發協助工具輔助,在這個過程要做一個類似檔案捷徑中尋找目 標的功能,先查MSDN98,大家不要見笑,我現在一直都用它,沒有相應的API, 後又. Net 2003中的MSDN,找到了可以實現該功能的API, SHOpenFolderAndSelectItems()函數,它的原型如下:(具體用法參考 MSDN)“Opens a Microsoft® Windows® Explorer window with specified items in a
Time of Update: 2017-02-27
先讓我們回顧一下普通的方法重載。普通的方法重載指的是:類中兩個以上的方法(包括隱藏的繼承而來的方法),取的名字相同,只要使用的參數類型或者參數個數不同,編譯器便知道在何種情況下應該調用哪個方法。而對基類虛方法的重載是函數重載的另一種特殊形式。在衍生類別中重新定義此虛函數時,要求的是方法名稱、傳回值類型、參數表中的參數個數、類型、順序都必須與基類中的虛函數完全一致。在衍生類別中聲明對虛方法的重載,要求在聲明中加上override關鍵字,而且不能有new,static或virtual修飾符。還是讓我
Time of Update: 2017-02-27
上一次的程式示範了怎樣做一個錄音機的程式,不過我的主要目的是要做一個能嵌入網、Director、authorware 等應用軟體的ActiveX 控制項,下面就來看以下基本實現方法。程式運行結果如下:圖一為簡單起見,本控制項沒有設定介面、屬性、方法等等,基本的程式思路跟上一篇的類似,大家看源碼,就曉得了。一個重要的心得就是,ActiveX
Time of Update: 2017-02-27
介紹到現在為止,我們還沒有討論過任何有關組合語言的東西。但是 如果我們真的要瞭解ATL底層內幕的話,就不能迴避這一話題,因為ATL使用了一 些底層的技術以及一些內聯組合語言來使它更小巧快速。在這裡,我假設讀者已 經擁有了組合語言的基礎知識,所以我只會集中於我的主題,而不會再另外寫一 份組合語言的教程。如果你尚未足夠瞭解組合語言,那麼我建議你看一看Matt Pietrek於1998年2月發表在Microsoft System Journal的文章《Under The Hood
Time of Update: 2017-02-27
一:擷取NT下進程路徑的方法在Win9X系統中,利用ToolHelp
Time of Update: 2017-02-27
“如果一個程式只含有數量固定的對象,而且已知它們的存在時間,那麼這個程式可以說是相當簡單的。”通常,我們的程式需要根據程式運行時才知道的一些標準建立新對象。若非程式正式運行,否則我們根本不知道自己到底需要多少數量的對象,甚至不知道它們的準確類型。為了滿足常規編程的需要,我們要求能在任何時候、任何地點建立任意數量的對象。所以不可依賴一個已命名的控制代碼來容納自己的每一個對象,就象下面這樣:MyObject
Time of Update: 2017-02-27
學習了多型的知識後,由於多型是如此“聰明”的一種工具,所以看起來似乎所有東西都應該繼承。但假如過度使用繼承技術,也會使自己的設計變得不必要地複雜起來。事實上,當我們以一個現成類為基礎建立一個新類時,如首先選擇繼承,會使情況變得異常複雜。一個更好的思路是首先選擇“合成”——如果不能十分確定自己應使用哪一個。合成不會強迫我們的程式設計進入繼承的分級結構中。同時,合成顯得更加靈活,因為可以動態選擇一種類型(以及行為),而繼承要求在
Time of Update: 2017-02-27
超媒體到底是什嗎?!如果你有幸聽說過REST架構風格,那麼你也可能聽說某些人認為統一介面是最重要的約束,尤其是該介面在制約資源上能被調用的方法方面。但是,你沒有意識到的是,對於統一介面還有很多東西。特別是一個被笨拙地冠以“超媒體即應用狀態引擎(hypermedia as the engine of application