C#學習筆記(一)

來源:互聯網
上載者:User

C#學習筆記(一):C#與C++文法的一些不同

 

1,C#中沒有了"::"的網域作業符,全部用了"."了。但是繼承還是用的":",C#的"::"是用作命名空間別名的修飾符。

 

2,在C#中變數使用前必須初始化,程式員顯式的或者編譯器自動的。其中:變數是類或者結構中的欄位,如果沒有顯式初始化,則在預設建立這些變數的時候其值就是0。然而方法的局部變數必須在代碼

中顯式初始化。(這與C++中不同)。

 

3,例如對於下面語句:SomeType obj;在C++這個是一個實值型別,會在堆棧中建立一個SomeType的執行個體。但是在C#中這個只會為SomeType對象建立一個引用,這個引用還沒有指向任何的對象。也就不能調用它的方法。然而C#中執行個體化對象要使用new關鍵字,將Object Storage Service在堆上。返回一個引用。

 

4,下面的代碼:
public static in Mian()
{
    int j = 20;
    for (int i = 0; i < 10; i++)
    {
    int j = 30;
    //....use value j...
    }
}
與C++不同的是這個時候C#不能隱藏for迴圈的變數:j,前面的j還在定義域中。但是對於下面代碼:
static int j = 20;
public static void Main()
{
    int j = 30;
    //....use j
}
這個就是可以的,這個是靜態變數,但是注意靜態方法中不能使用類的執行個體變數。

 

5,C#中常量總是靜態,同時不允許在常量的聲明前加上static。C#中變數是值還是引用只取決於變數的資料類型,int總是實值型別(除非利用裝箱技術)。但是C++中顯然我們可以直接選擇是值還是指標訪問變數。注意:string和object是參考型別。

 

6,C#中自訂的Struct類型就是一個實值型別,而自訂的Classe類型就是參考型別。C++則無此區別。

 

7,C#中byte類型在預設的狀態下是無符號的,有符號版本是sbyte。

 

8,幾個表示浮點的類型:
float類型:CTS類型為System.Single,32位單精確度浮點數,小數位元7位,範圍大致:(+/-)1.5*10^(-45) ~ (+/-)3.4*10^38。                                                                                                                                          
double類型:CTS類型為System.Double,64位雙精確度浮點數,小數點後15/16位,範圍大致:(+/-)5.0*10^(-324) ~ (+/-)1.7*10^308。                                                                                                                           
decimal類型:CTS類型為System.Decimal,128位高精度十進位數標記法。小數點位元是28位,(+/-)1.0*10^(-28) ~ (+/-)7.9*10^28,多用於財務計算。demical不是基本類型,使用會有效能損失。decimal d = 12.30M;

 

9,C#的char類型是16位的(Unicode)字元。

 

10,關於string類型一些注意的:雖然string類型是參考型別但是有很多不同。
例如:string s1 = "aaa"; string s2 = s1; s1 = "ccc"; 這時s2並不會跟著s1的改變而改變,這點和參考型別不同的了。
字串字面量前面可以加上@符號:就表示輸出就是“”裡面的內容。即使裡面有個斷行符號換行也就代表換行:
@"aa\b" 等同於 "aa\\b"
@"'asdasdfa a aggagag
fafafafa dfa"輸出就是:
asdasdfa a aggagag
fafafafa dfa

 

11,switch...case...語句中,case後面必須是常量運算式(包括字串常量)或枚舉枚舉類型。但是要注意的是:除非case語句後面處理常式是空的,否則,就一定要加上break;語句。如果case子句是空的,也可以跳到下一個語句中去。還可以用goto語句隨便跳。(goto語句在C#中的switch...case...語句中跳轉是個好用處)。
case "America":
do....;
goto case "Britain";
case "France":
do....
break;
case "Britain":
do...
break;
這個也是可以的。

 

12,foreach迴圈不能改變集合中各個項的值。

 

13,C#的數組定義是:int[] integers = new int[32];
所有的數組都是參考型別,遵循引用的語義。而數組的各個元素可以是實值型別。int[] copy = integers;表示copy指向同一個數組,不是建立一個新的。

 

14,Console.WriteLine()的格式化輸出:
int i = 900, j = 80;
Console.WriteLine("{0} plus {1} equals {2}", i, j, i + j);
也可以為值指定寬度,調整文本在寬度中的位置,正值靠右對齊,負值靠左對齊。格式{n, w}中,n為索引參數,w是寬度值。
Console.WriteLine("{0,4}\n+{1,4}\n----\n{2,4}", i, j, i+j);

 

15,C#中保留字前面加上@就表示是個標識符了。

 

16,string類型不能改變字串的值,(如果改變就會在堆中建立一個新的字串),所以它不同於一般的引用。所以string作參數的時候不能改變實參的。

 

17,ref和out的區別:
ref:可以使實值型別的參數變為參考型別,void Fun(int[] ints, ref int i),調用這個方法的時候也要加上這個關鍵字Fun(ints, ref i)。注意:無論是值傳遞還是引用傳遞,變數實參都必須初始化的。
out:參數前面加上out的話,傳遞給該方法的變數可以不初始化。但是在函數中一定要給這個參數賦值,也就初始化了實參了。

 

18,C#的重載:
(1),不支援預設實參。
(2),兩個方法不能根據傳回型別區別。
(3),兩個方法不能根據參數是聲明為ref還是out來區分。

 

19,關於靜態建構函式:
(1),類(不一定要靜態類)可以編寫靜態建構函式,但是不能有任何參數。
(2),靜態建構函式由.Net調用,程式員不能確定它在哪個確切時刻調用,但是它一定在程式第一次使用類之前調用,只能調用一次,如果類的靜態變數有預設值,一定在調用靜態建構函式之前指定。
(3),靜態建構函式的一個很好的用處是:初始化靜態欄位或者屬性。包括常量或者唯讀成員。

 

20,C#的建構函式的初始化器只能調用建構函式(可以用this()),不能初始設定變數。

 

21,唯讀變數:readonly
readonly允許把一個欄位設定為一個常量,但是可以執行一些運算,確定它的初始值。只能在建構函式中給他賦值(當然聲明的時候可以初始化),不能在其他地方。唯讀欄位還可以是一個執行個體變數(常量const預設就只能是靜態成員),在執行個體建構函式中初始化,這樣類的每個執行個體都可以有不同的值。要把唯讀欄位設定為靜態必須顯示的聲明才行。我們沒必要把唯讀欄位或者常量設定為私人,因為它們不能在外部修改。在建構函式中如果沒有給唯讀欄位賦值它也會是其資料類型的預設值,或者聲明時候的初始化值。

 

22,struct和class的區別:
(1),結構是實值型別,類是參考型別。結構儲存在堆棧中或者儲存為內聯,其生命週期和簡單的資料類型一致的。
(2),結構不支援繼承的,但是它派生於VlaueType,也就是Object類的衍生類別,可以繼承或者重載其方法。
(3),結構的建構函式的工作方式與類不同,其中,結構的總是由編譯器提供一個無參的預設建構函式,使用者不能替換的,也就是說使用者只能自己定義有參數的建構函式。
(4),使用結構可以指定欄位在結構中的布局。
(5),例如:
Dimensions point = new Dimensions(); point.Length = 3;這裡的new運算子與類類型不同,它不在堆中分配記憶體空間,只是根據相應的參數調用相應的建構函式。
然而對於:Demensions point; double d = point.Length;就不行了,因為這個只是在堆棧中分配了變數point的記憶體空間,但是沒有初始化其成員,就像未初始化的成員不可訪問的(可以賦值)。
(6),結構中定義的變數不能在聲明時候初始化:struct Dimensions{public double Length = 1; int Width = 2;}錯誤的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.