2007-9-4
引用,該型別的變數不直接儲存所包含的值,而是指向它所要儲存的值。
c#的引用型別有四種:類、代表、陣列、介面。
一下**表示類b從類
a中繼承:
class a{}
class b:a{}
類的成員有以下型別:
成員常量,代表與類相關聯的常量值。
域,即類中的變數。
成員方法,複雜執行類中的計算和其它操作。
屬性,用於定義類中的值,並對他們進行讀寫。
事件,用於說明發生了什麼事情。
索引指示器,允許向使用陣列那樣為類新增路徑列表。
操作符,定義類中特有的操作。
建構函式和析構函式,分別用於對例的例項進行初始化和銷毀。
internal修飾符的類的成員對於同一包中的應用程式或庫是透明的,而在包.net之外是禁止訪問的。
包? sealed?
類的例項——物件
保留字this僅限於在建構函式、類的方法和類的例項中使用。
靜態成員是屬於類所有的,非靜態成員則屬於類的例項。
任何建構函式的執行都隱式地呼叫了系統提供預設的建構函式base()。
c#實現了完全意義上的物件導向:任何事物都必須封裝在類中,或者作為類的例項成員——沒有全域性常數、全域性變數,也沒有全域性方法。
陣列型引數:若形參表中包含了陣列型引數,那麼它必須在參數列中位於最後。另外,引數只允許是一維陣列。最後,陣列型引數不能再由ref和out修飾符。
11.3靜態方法和非靜態方法
靜態方法是一種特殊的成員方法,它不屬於類的某乙個具體的例項。非靜態方法可以訪問類中的任何成員,而靜態方法只能訪問類中的靜態成員。
視窗控制代碼是windows作業系統中儲存視窗相關資訊的一種資料結構,我們在這個例子中簡化了對控制代碼的使用)。
11.4方法的過載
11.5操作符的過載
為什麼操作符的過載都使用靜態方法?
域的預設初始化分為兩種情況:對於靜態域,類在裝載是對其進行初始化;對於非靜態域,在類的例項建立時進行初始化。在預設的初始化之前,域的值是不可**的。
class test
合法實際上等於a=1,b=2;
class a
不合法,非靜態變數x在類a例項化以前並沒有初始化。
c#中的屬性更充分地體現了物件的封裝性:不直接操作類的資料內容,而是通過訪問其進行訪問。它借助於get和set對屬性的值進行讀寫。
12.2.2訪問屬性的值
除了使用了abstract修飾符的抽象屬性,每個訪問器的執行中只有分號「;」,其他所有屬性的get訪問器都通過return來讀取屬性的值,set訪問器都通過value來設定屬性的值。
12.3小結
描述乙個類的特性有兩種方式,一種是通過域,一是通過屬性。域作為public型別的成員變數訪問,而屬性不能直接進行訪問,必須通過訪問其(accessors)進行。在c#
中,包(
package
)被稱為命名空間。把命名空間引入
c#「using」
。例如,
「using system;」
這個語句引入了
system
命名空間。 在
c#中,物理的包和邏輯的名稱之間是完全分離的,也就是說,命名空間的名字不會對物理的打包方式產生任何影響。在
c#中,每乙個源**檔案可以從屬於多個命名空間,而且它可以容納多個公共類。
.net
中包的實體稱為程式集(
assembly
)。每乙個程式集包含乙個
manifest
結構。manifest
列舉程式集所包含的檔案,控制哪些型別和資源被顯露到程式集之外,並把對這些型別和資源的引用對映到包含這些型別與資源的檔案。程式集是自包含的,乙個程式集可以放置到單一的檔案之內,也可以分割成多個檔案。
.net
的這種封裝機制解決了
dll檔案所面臨的問題,即臭名昭著的
dll hell
問題。
sealed修飾符可以應用於類、例項方法和屬性。密封類不能被繼承。密封方法會重寫基類中的方法,但其本身不能在任何派生類中進一步重寫。當應用於方法或屬性時,sealed修飾符必須始終與
override(c# 參考)
一起使用。
三、操作符過載
1、操作符過載
c#中對操作符過載的一些限制:
l必須宣告為public static
l必須有乙個引數為操作符所屬型別
l不能改變操作符原始定義的引數個數
l若定義了true操作符也必須同時定義false操作符,二者都必須返回bool值
l、--操作符必須返回其所隸屬之型別的乙個例項
l可被過載的一元操作符: 、-、!、~、 、--、true、false
l可被過載的二元操作符: 、-、*、/、%、!、^(異或)、<、>、<<、>>、==、!=、<=、>=
l不允許被過載的操作符:&&、||、=、?:、 =、-=、/=、%=、|=、^=、<<=、>>=,實際上其中一些「複式操作符」在二元操作符被過載後自動生成,而不能顯式定義
l必須成對過載的操作符:(== ,!=)、(<,>)、(<=,>=)
l、--操作符過載時不能區分其為前置或後置的
2、操作符過載與語言互操作性
編譯器會為過載的操作符生成乙個特殊名稱的方法,如 (加)操作符生成op_addition()方法,並為該方法的定義條目上加上specialname標記。當某種語言不能進行操作符過載時,可以直接定義具有該特殊名稱的方法,以在其他語言中呼叫;或直接呼叫具有該特殊名稱的方法以適應某種語言不能解析操作符的限制。如:vb中不能過載操作符,可顯式定義op_addition()方法以在c#中呼叫;c#中定義的 操作符不能被vb識別,可顯式呼叫op_addition()方法獲得同樣的功能。
C 學習筆記 一
c 學習筆記 一 by heiyeluren 學習 visual c 入門經典 的個人筆記。1.函式的過載 函式過載提供了建立多個同名函式的能力。我們確定乙個函式是獨一無二的方法是通過三項方法,分別是是通過返回值的型別,函式名,函式 引數等三項內容。我們函式過載主要就是使用不同的引數來確定使用那個函...
C 學習筆記一
c中的記憶體分配方式 1.靜態儲存區域 在程式開始之前就可以分配,且在程式執行過程中始終存在 2.棧 儲存單元在其上分配,單元外自動釋放,多見內建 資料型別於此 3.堆 動態分配,即程式執行時分配此部分記憶體.由使用者分配且要負責釋放.生存期由使用者決定,不受範圍限制 stdlib.h提供mallo...
C 學習筆記(一)
建立.net應用程式的步驟 1 使用某種.net相容語言編寫應用程式 2 把 編譯為cil,儲存在程式集中 3 執行 時,使用jit編譯器將 編譯為本機 4 在託管的clr環境下執行本機 以及其他應用程式或程序 用字串表示帶路徑的檔名,字串中會帶有大量的斜槓,例如 c temp mydir myfi...