(1
)值型別的變數本身包含他們的資料值(將儲存在棧中),而引用型別的變數包含的是指向包含資料值的記憶體塊的位置資訊(將儲存在受控的堆中)。
(3)引用型別共分四種型別:類、介面、陣列、委派。類除了我們可以定義自己的型別外,又包括兩個比較特殊的型別object和string(它們為預定義引用型別)。object是c#中所有型別(包括所有的值型別和引用型別)的根類。string型別是乙個密封型別(不能被繼承),其實例表示unicode字串;介面型別定義一系列方法的集合;委派型別是乙個指向靜態或例項方法的簽名,類似於c/c++中的函式指標。
(1)靜態變數和例項變數主要是針對類或結構內的資料成員(又叫域)而言的。靜態變數在它寄存的類或結構型別被裝載後得到儲存空間,如果沒有對它進行初始化賦值,靜態變數的初始值將是它的型別所持有的預設值。對靜態變數的訪問只能通過型別名,而不能通過物件名訪問。
(2)例項變數在它的類例項(物件)被建立後獲得儲存空間,如果沒有經過初始化賦值,它的初始值與靜態變數的定義相同(其初始值將是它的型別所持有的預設值)。對例項變數的訪問只能通過物件名訪問。
(3)傳值形參、引用形參、輸出引數、陣列引數主要針對方法的引數型別而言的。簡單地講傳值形參是對變數的值的副本的一種傳遞,方法內對變數的改變在方法體外不起作用。
(4)引用形參是對變數的位址的一種傳遞,方法內對該變數的任何改變都將在方法體外保留。無論在定義還是在使用時,都必須採用ref修飾符加以說明。
傳值引數傳遞的是呼叫引數的乙份拷貝,而傳位址引數(引用)傳遞的是呼叫引數的記憶體位址,該引數在方法內外指向的是同乙個儲存位置。
(5)輸出形引數是
c#專門為有多個返回值的方法而量身定做的,它類似於引用變數,但可以在呼叫方法體之前不進行初始化但在被呼叫的方法返回前必須對該變數進行賦值,而其他的引數在進入方法體內
c#都要求明確的初始化。無論在定義還是在使用時,都必須採用
out修飾符。
1.2.4、c#中的操作符
c#保留了c++所有的操作符,其中指標操作符(*和->)與取位址符(&)需要有unsafe的限定。c#擯棄了範圍辨析操作符(::),一律改為單點操作符(.)。下面主要介紹c#中引入的具有特殊意義的幾個操作符:as,is,new,typeof,sizeof,stackalloc。
(1)as操作符用於執行相容型別之間的轉換(類似於強制型別轉換),當轉換失敗時,as 操作符結果為
null
。它比常規的強制型別轉換的優點在於:如果被轉換的值無法轉換,此時轉換的結果為
null
,而不會產生異常。
1:using system;
2:class person
3:5:public class test
6:",me.gettype());
11: }
12:}
(2)is操作符用於檢查物件的執行時型別是否與給定型別相容,當表示式非
null
且可以轉化為指定型別時,
is操作符結果為
true
,否則為
false。as
和is操作符是基於同樣的型別鑑別和轉換而設計的,兩者有相似的應用場合。實際上
expression as type
相當於expression is type ? (type)expression :(type)null。
point p=new point();
if(p is point) //返回為true
else if(p is object) //返回為true
(3)操作符
new主要用於在堆上建立物件(如建立物件、陣列和**等)和呼叫建構函式,值得注意的是值型別物件(例如結構)是在堆疊上建立的,而引用型別物件(例如類)是在堆上建立的。new也可用於修飾符,用於隱藏基類的成員。為隱藏繼承的基類成員,使用相同名稱在派生類中宣告該成員並用 new修飾符重寫它。
1:point p=new point(10,10);
2:public class mybaseclass
3:6:}
7:public class myderived:mybaseclass
8:11:}
如果巢狀型別隱藏在另一種型別中,可以採用new 限定符來修改巢狀型別。
1:using system;
2:public class mybasec
3:6:}
7:public class myderivedc:mybasec
8:11: public static void main()
12:
18:}
(4)typeof
運算子(它不能被過載)用於獲得某一型別的
system.type
物件。
type tval=typeof(point); //獲得point類的型別的system.type 物件,從而可以使用type類中的方法。
(5)sizeof
運算子(它不能被過載)用於獲得指定的值型別(不適用於引用型別)在記憶體中所占用的位元組數(它只能用在非安全**中)。應用例項如下:
1:using system;
2:struct mystruct // 定義結構型別
3: b= c=",a,b,c);
7: }
8:}
9:enum weekdays; // 定義列舉型別
10:class demo
11:17:}
(6)stackalloc
它用來為區域性指標變數分配棧記憶體空間(它只能用在非安全**中)。並且無法被顯示地釋放,只在方法執行完後被自動釋放。應用例項如下:
1:using system;
2:class demo
3:10: for(int i=0;i<6;i++) // 顯示分配的記憶體內容
11: ] = ",i,parray[i]);
12: }
13: } //但在方法執行完畢後將自動釋放parray的記憶體空間
14:}
專案學習積累1
gridview顯示問題 1 網格線 有2種方法去掉 第一種,在頁面上寫 td的屬性 邊框為 0px 然後設定 gridview 的自身邊框為 0px,就可以了 但很少用這種了 以前用過段時間 第二種,gridlines none borderwidth 0 cellpadding 0 cellsp...
C 除錯積累1
d test test.cpp 1 error c2143 syntax error missing before pch creation point 我編寫了乙個標頭檔案,裡面是乙個結構體和乙個簡單的類。但是報錯如上面資訊 hicc.h typedef struct note note clas...
C和C 的點滴積累(1)
c和c 的點滴積累 1 1.mfc程式設計中存在著如果出現 記憶體不足 的對話方塊,一種情況是在申請記憶體的時候出現問題,也就是例如 char pchar new char num 但此時num 為零或者負數的情況。2.位運算只是用於char 和int 兩種型別,不適用於double,float,l...