1. 程式人生 > >c#學習筆記Day1

c#學習筆記Day1

第一章

1.變數初始化

1.1 變數初始化是c#強調安全性的另一個例子。簡單的說,c#編譯器需要用某個初始值對變數進行初始化,之後才能在操作中應用變數。大多數現代編譯器把沒有初始化標記為警告,而C#則把他當做錯誤來對待,這就可以防止我們無意中從其他程式遺留下來的記憶體中獲取垃圾值。

1.2 c#有兩種方法可以確保變數在使用前進行了初始化:

    1.變數是類或結構中的欄位,如果沒有顯示初始化,建立這些變數時,其預設值就是0.

    2.方法的區域性變數必須在程式碼中顯示初始化,之後才能在語句中使用他們的值。此時初始化不是在宣告該變數時進行的,但編譯器會通過方法檢查所有可能的路徑,如果檢測到區域性變數在初始化之前就使用了它的值,會產生錯誤。

1.3 考慮下面語句:

         Something objSomething;

         在c#中,這行程式碼僅會為Something物件建立一個引用,但這個引用還沒有指向任何物件,對該變數呼叫方法或屬性會導致錯誤。

         在C#中例項化一個引用物件需要使用New關鍵字。使用New關鍵字把該引用指向儲存在堆上的一個物件。

2.型別推斷

2.1 型別推斷使用Var關鍵字。編譯器可以根據變數的初始化值“推斷”變數型別。

2.2 使用var時的注意事項:

1. 必須在定義時初始化。也就是必須是var s = 1;形式,而不能是如下形式: var s; s = 1;

2. 一但初始化完成,就不能再給變數賦與初始化值型別不同的值了。比如,var s=1;聲明後再有s="abc"是不支援的。

3.var要求是區域性變數,不能是全域性變數。

4.使用var定義變數和object不同,它在效率上和使用強型別方式定義變數完全一樣。

3變數的作用域

4.常量

1.常量有如下幾個特點:

         常量必須在宣告時初始化

         常量的值必須能在編譯時用於計算,因此不能從一個變數中提取的值來初始化常量。如果需要那麼做,應使用只讀欄位

         常量總是靜態的,但不允許在常量宣告時包含static修飾符

5.預定義資料型別

1.值型別與引用型別

         區別是值型別直接儲存其值,引用型別儲存對其值的引用。

         這兩種型別儲存在記憶體的不同地方:值型別儲存在堆疊中,引用型別儲存在託管堆中。

2.特別的String型別

         String型別是一個引用型別,string物件被分配在堆上,而不是棧上。因此,當把一個字串變數賦予另一個字串時,會得到對記憶體中同一字串的兩個引用。但是,string與引用型別的常見行為有一些區別,例如,字串是不可以改變的。修改其中一個字串,就會建立一個全新的string物件,而另一個字串不發生任何改變。