1. 程式人生 > >C#語言基礎理解

C#語言基礎理解

        學習c#視訊有幾天了,看完其語言基礎之後,我對c#語言基礎做了一個總結,來鞏固所記的知識,同時希望能給你幫助。

    最近一直在看c#視訊,開始時看不懂,後來找師傅討論了一下,自己重新看是有感覺,所以又重新開始。針對這兩天的學習對c#語言基礎做一下總結。

        資料型別

    構成:資料型別,常量和變數,運算子和表示式,陣列、結構和列舉

    資料型別包括值型別、引用型別和裝箱以及拆箱。

值型別資料儲存在棧中。棧:它是用於儲存固定長度的資料,例如int(每個int佔用四個位元組),每個程式在執行時都有自己的堆疊,其他程式不能訪問該堆疊。

    引用型別資料儲存在堆中。堆:是由new

分配的記憶體,一般速度比較慢,而且容易產生記憶體碎片,不過用起來最方便。(雖然對於堆得解釋字數也不多,但是始終感覺堆理解其堆來有點兒抽象,不怎麼明白。)

        值型別

    值型別就是一個包含實際資料的量。當我們定義一個值型別的變數時,c#會根據它宣告的型別,以堆疊方式分配一塊兒相應的儲存區域給這個變數。(這裡對於堆疊的理解只能是有一點,但是還表達不出來,希望高手指點。)

        值型別包括:簡單型別、列舉型別和結構型別。

        簡單型別

        在C#中出現的簡單型別共享一些特性。第一,它們都是.NET系統型別的別名。第二,由簡單型別組成的常量表達式僅在編譯時而不是執行時受檢測。最後,簡單型別可以按字面被初始化。以下為C#

簡單型別歸類:

        簡單型別是系統預置的,分為整數型別、浮點型別、小數型別(decimal型別)、字元型別和布林型別。提高班第一年有一些VB的基礎,這裡我感覺可以和VB比較記憶。

        通過比較我們可以發現。

1.      VB中整型、長整型、位元組型和C#整型所表示的意思(範圍)是一致。

2.      VB中單精度和雙精度和C#浮點型所表示的意思(範圍)是一致的。

3.      VB的貨幣型和C#小數型也是相似的。(不過,很明顯C#所表示的貨幣範圍遠遠超過了VB貨幣型所表示的範圍)

4.      VBC#同樣都具有字串型別和布林型

5.      明顯不同的是vb

特有日期型。

有了VB的基礎理解C#沒有什麼困難。欠缺的只是對於它們的熟練程度。

         結構型別

         把一系列相關的資訊組織成為一個單一實體的過程,這就是建立一個結構的過程。

    struct person
    {
    string m_name; //姓名
    int m_age;     //年齡
    string m_sex;  //性別
    } 

       列舉型別

         主要用於表示一個邏輯相關聯的項和組合。使用關鍵字enum來定義。

    enum Weekday
    {
      Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday
    }

      引用型別

        引用型別的變數不儲存他們所代表的實際資料,而是儲存實際資料的引用。引用型別分兩步建立:首先在堆疊上建立一個引用變數,然後再堆上建立物件本身,在把這個記憶體的控制代碼(記憶體的首地址)賦給引用變數。

        例子:

     String S1,S2;

     S1=”ABCD”;

     S2=S1;

        解釋:s1s2都是指向字串的引用變數,s1的值是字串“ABCD”存放在記憶體地址中,這個就是對字串的引用,兩個引用型變數之間的賦值,使得s1s2都是對“ABCD”的引用。

        引用型別包括:class()interface(介面)、陣列、delegate(委託)、objectstring

        拆箱和裝箱

        值型別與引用型別之間的轉換被稱為裝箱與拆箱。裝箱和拆箱是c#型別系統的核心。我們通過裝箱和拆箱操作可以輕鬆的實現值型別和引用型別的相互轉換。

        例如:

     Int Num=123;     //將123值賦給int型變數Num

     Object p=Num;    //裝箱動作

     Int q=int(p)       //拆箱動作

     常量和變數

     常量就是程式執行期間其值不會改變的量。

     變數是在程式執行過程中其值可以改變的量。

    運算子和表示式

        算數運算子:

    

        關係運算符:

    

        邏輯運算子(與(&&)或(||)非(!)):

    

        賦值運算子:

    

        條件運算子:

        條件運算子是一個三元運算子,可以看成一個if……else的簡化形式。

         格式為:條件?真:假

        舉例:

         在控制檯中輸入以下程式碼:

           int x = 10;
           int y = 15;
           int z;
           Console.WriteLine (z = x > y ? x : y);

   結果如圖,很明顯顯示的是y說明是假。

  

    流程控制

    條件語句

         If語句

        句式:

        第一種:

    If (條件)語句;

        第二種:

    if (條件)
    {
      語句塊
    }
    Else
    {
         語句塊
    }

        此外在if中還可以巢狀if語句。

            Switch語句

            Switch是一個多分支結構的語句。語法結構為:

        switch (表示式)
        {
         Case常量1:
                   語句序列1;
                   Break;
         Case常量2:
                   語句序列2;
                    Break;
         ……
         Default:
                   語句序列n;
                   Break;
        }

    迴圈語句

           While語句

    While (表示式)
    {
         迴圈體語句塊
    }

           Do  while語句

    Do
    {
         迴圈體語句塊
    } while (表示式);


           For 語句

    For (表示式1;表示式2;表示式3)
    {
         迴圈體語句
    }

        其中表達式1是設定迴圈控制變數的初值,表示式2時布林型別的表示式,表示式3是設定迴圈控制變數的增值(正負皆可)。PS:3個表示式都是可選的,預設表示式時,其後的分好“;”不能省。

         Foreach語句

         Foreach語句是C#新引入的,它表示收集一個集合中的各元素,並針對各元素執行內嵌語句。

       語法格式:

    Foreach (型別          標示符     in      集合表示式)語句;

        標示符是指foreach迴圈的迭代變數,它只在foreach語句中有效,並且是一個只讀區域性變數,也就是說在foreach語句中不能改寫這個迭代變數。

        集合表示式是指被遍歷的集合,例如陣列。

        舉例:

            int m = 0;
            string mystring = "fsofknwlsnfoaafdagadf";
            foreach (char mychar in mystring)
            {                
                if (mychar == 'a')
                    m++;
            }
            Console.WriteLine("字串中總共有{0}個a", m);

結果如圖:

   

跳轉語句

         跳轉語句用於改變程式的執行流程,轉移制定之處。用於特定的上下文環境之中。

Continue語句

        Continue語句只能用於迴圈語句中,它的作用是結束本輪迴圈,不再執行餘下的迴圈體語句,對whiledo_while結構的迴圈,在continue執行之後,就立刻測試迴圈條件,以決定迴圈是否繼續下去;對for結構迴圈,在continue執行之後,先求表示式3(迴圈增量部分),然後再測試迴圈條件。

例如:顯示1-100中能被3整除的整數。

           for (int n = 1; n <= 100; n++)
           {
                if (n % 3 != 0)
                    continue;
                {
                    Console.WriteLine(n );
                }
           }

結果:

Break語句

        Break語句也只能用於迴圈語句中或者switch語句中,如果在迴圈語句執行到break語句,則會導致迴圈立刻結束,跳轉到迴圈語句的下一條語句。不管迴圈多少層,break語句只能從包含它的最內層跳出一層。如果在switch語句中執行到break語句,則立刻從switch語句中跳出,轉到switch語句的下一條語句。

看下面的例子:

Return語句

        Return語句出現在一個方法內。在方法中執行到return語句時,程式中的執行流程轉到呼叫這個方法處。如果方法沒有返回值(返回型別修飾位void),則使用“return”格式返回;如果方法有返回值,那麼使用“return表示式”格式,其後面跟的表示式就是方法的返回值。

Goto語句

        Goto語句可以將程式的執行流程從一個地方轉移到另一個地方非常靈活。但正因為它靈活,所以容易造成程式結構混亂的局面,應該有節制地、合理使用goto語句。

異常處理

        程式對異常的處理能使程式更加健壯。這裡就不做更多的說明

陣列、結構和列舉

        陣列:陣列是一種包含若干變數的資料結構,這些變數都具有相同的資料型別並且排雷有序,因此可以用一個統一的陣列名和下標唯一的確定陣列中的元素。

        陣列使用時要先宣告然後在建立最後初始化陣列,具體語法形式:

Type [ ] arrayname;

Arrayname =new type[size] {  val1,val2,val3,….valn  };

或者結合起來寫:

Type [ ] arrayname = new type [size ] {  val1,val2,val3,….valn  };


Type可以是C#中任意的資料型別。

[ ] 是表明後面的變數是一個數組型別,必須放在陣列名之前。

Arrayname 是陣列名,遵循識別符號的命名規範。

Size 表明陣列原色的個數。

Val 則表示陣列的具體值。

具體示例:

例子1:

Int []  course = new int [ 10 ] {1,2,3,4,5,6,7,8,9,10} // student 是一個含有10個int型別的陣列。

例子2:建立一個5個數的陣列(10050607099)並計算出他們的最大值和最小值。

程式碼如下:

           #region 陣列的例項
           int max;
           int min;
           int[] Num = new int[5] { 100, 50, 60, 70, 99 };
           max = min = Num[0];
           for (int i = 0; i <= 4; i++)
           {
                if (Num[i] > max)
                {
                    max = Num[i];
                }

                if (Num[i] < min)

                {
                    min = Num[i];
                }
              
           }
           Console.WriteLine("您要求的陣列中最大數為" + max + ";最小數為" + min);
           #endregion


   

        結構和列舉和值型別中說的是一個,這裡就不多說了。

        在總結c#語言基礎的過程中,我也不斷地看著以前學習的visual basic那本書,不得不說學好了vb在學習c#上就容易許多啊。他們之間好好多相同的地方。在和vb比較的過程中我同時又學到了不少以前不懂的東西。