面向對象(基礎oop)之結構與數組高級

 

      你們好,我叫李京陽,,很高興認識你們,之因此我想開一個本身的博客,就是來把本身所瞭解的知識點經過本身的話寫一下,但願被博客園的朋友們點評和一塊兒討論一下,也但願從博客園中多認識一些軟件開發人員!如今我開始講一下面向對象的一點知識,請大家多多點評和討論!!程序員

 


           1. 結構體與咱們以前學的類特別的類似.
           
           2. 定義結構體的語法
              struct 結構體的名字
              {
             
          
              }
數組

          

 1     struct Point
 2     {
 3         public int x; 
 4         public int y;
 5         public Person p;
 6 
 7         public Point(int x,int y)
 8         {
 9             this.y = y;
10             this.x = x;
11             p = new Person();
12         }


           3. 定義的位置:
              和類同樣,定義在命名空間的下面.
           4. 結構體中能夠定義字段、方法、屬性、構造函數.
              結構體的使用與類同樣. 也須要建立對象 而後調用對象的成員.
            1 Yuan y = new Yuan(12.56); 2 Console.WriteLine(y.GetZhouChang()); 3 Console.WriteLine(y.GetArea());   
           5. 結構體與類的區別:
              a. 從語法上的區別.
                 1).類使用class關鍵字聲明,結構體使用struct關鍵字聲明
                 2).能夠爲結構體聲明字段,可是在聲明字段的同時不能爲其賦默認值,由於結構體能夠用結構體名 變量名的方式(Direction d1;)來聲明變量,這樣的話就會跳過構造函數,致使字段在使用前就沒有值。爲何類能夠呢,其實類也不行,只是編譯的時候會把賦值的執行代碼寫在構造函數裏面去,而類只能經過new關鍵字來建立變量,因此必定會執行構造函數(就算沒有賦值,執行構造函數也會賦默認值),因此用字段以前,必定會有值得。
                
                 3).屬性與類中的屬性同樣,用來保護字段的,這個和類中的屬性沒有區別.
                 4).方法一樣的表示1個功能,與類中的方法沒有任何區別.
                
                 5).無參數的構造函數不管如何都會被C#編譯器自動生成,因此不容許程序員爲結構體寫1個無參數的構造函數,而且反編譯咱們是看不到這個無參的構造函數的,只能new的時候在括號裏面看到重載的構造函數。
函數

                
                 6).要求在結構體的構造函數中,必需要爲當前結構體對象的每1個字段賦值.
              b. 建立對象
                 在建立結構體對象的時候,能夠像類那樣使用new關鍵字來建立. 也能夠不使用new關鍵字建立.
                 經過new關鍵字建立對象之後,這個對象的每1個字段就已經有值(默認值)了.那麼咱們就能夠直接的使用.
                 由於經過new關鍵字建立對象,調用了構造函數.而在構造函數中又必需要爲每1個字段賦值.
                 咱們能夠猜出,無參數的構造函數中作的事情: 爲值類型的字段賦值0 爲引用類型的字段賦值null
                
                 若是不使用new關鍵字來建立對象,那麼這個結構體對象的字段是沒有值的,要求在使用字段的值以前必須爲字段賦值.
                 由於這種方式建立結構體對象沒有調用構造函數,而在聲明字段的時候又不容許賦值. 因此這樣建立對象字段是沒有值的.
                
           6. 結構體與類本質上的區別
              a. 結構體是1個值類型,類是引用類型
this

             
              b. 結構體的變量自己就是1個對象,其中不像類那樣存儲地址. 真正的結構體對象直接存儲在這個結構體的變量中.
                 結構體對象的成員直接存在結構體變量中,
                 在聲明結構體變量的時候, 其實就已經在結構體變量中建立好對象了.
                 new關鍵字僅僅調用構造函數.
              c. 結構體相互賦值的時候,是逐個拷貝字段的值. 
spa

                   
           
           7. 何時使用結構體.
              a. 棧空間比較小,可是訪問速度較快; 堆空間比較大,可是訪問速度較慢
              b. 結構體對象是分配在棧空間中,因此結構體對象的訪問速度比堆空間中的類的對象要塊.
              c. 當咱們要表示1個輕量級對象的時候,其中的成員較少.就能夠將其聲明爲結構體,
                 這個時候訪問速度較塊.
                 重量級對象當成員比較多的時候,就聲明爲類,讓對象分配在堆空間中.
3d


1. 二維數組: 它表示1個表格數據. 有行有列.
                 與數組的特色同樣: 全部的數據的類型相同. 存儲的個數固定.
              2. 建立1個二維數組呢? 二維數組的特色在於有行有列.
                 元素的類型[,] 數組的名稱 = new 元素的類型[行數,列數];
                
code

1   int[, ,] arr = new int[3, 5, 4];
2             Console.WriteLine(arr.Length); 
3             arr[0, 0, 0] = 12;
4             arr[2, 4, 3] = 19;


                 表示聲明瞭1個指定行數,每1行有指定列數的1個表結構.
                 二維數組的元素的個數: 行數列數
                
              3. 爲二維數組中的元素賦值.
                 二維數組中的元素必須經過行列兩個座標來肯定.肯定這個元素在第幾行的第幾列.
                 二維數組中的行列座標從0開始.
                
                 在索引器中寫上行座標和列座標就能夠定位到指定的元素.
                 arr[行座標,列座標]=值;
                
              4. 取值:
                 仍然經過行列座標去取值.
                 
              5. 一維數組表示1條線. 肯定線上的1點只要1個座標.
                 二維表示表示1個面. 肯定面上的1點要2個座標.
                
              6. 數組的Rank屬性 能夠獲得數組的維度.
             
              7. 遍歷:
                 Length屬性表明數組中元素的個數,而 二維數組中的Length指的是行列
                 a. 使用foreach能夠簡單快速的遍歷.
                    foreach(int item in arr)
                    {
                        cw(item);
                    }
                 b. 數組的GetLength()方法能夠獲得指定維度的長度.
                    傳入0 能夠獲得行數,
                    傳入1 能夠獲得列數
                    for(int i=0;i<arr.GetLength(0);i++)
                    {
                       for(int j =0;j<arr.GetLength(1);j++)
                       {
                            arr[i,j];
                       }
                    }
             
對象

 1   for (int i = 0; i < arr.GetLength(0); i++)
 2             {
 3                 for (int j = 0; j < arr.GetLength(1); j++)
 4                 {
 5                     for (int k = 0; k < arr.GetLength(2); k++)
 6                     {
 7                         Console.WriteLine(arr[i,j,k]);
 8                     }
 9                 }
10             }

             
              8. 當我有1個表格數據的時候.
                 這些數據有行有列的存儲.  咱們就可使用二維數組.
                
              9. 使用數組初始化器初始化二維數組中的每1個元素,
                 int[,] arr = { { 10, 20, 30 }, { 40, 50, 60 }, { 60, 70,80} };
            
             
             
              10.三維數組.int[, ,] arr = new int[3, 5, 4];
blog

 


1. 在類中只能定義字段、屬性、方法、構造函數.
                 語法上容許在定義字段的同時爲字段賦值.
             
             
              2. 交錯數組的本質是1個一維數組,只不過這個1維數組的元素的類型是1個數組.
                 元素的類型[][] 數組的名稱 = new 元素的類型[交錯數組的長度][]
                 在聲明交錯數組的時候,只須要指定1維數組的長度。
                
索引

1    int[][] arr = new int[4][];
2             arr[0] = new int[4];
3             arr[1] = new int[3];
4             arr[2] = new int[5];
5             arr[3] = new int[9];


              3. 賦值.
                 給交錯數組的元素賦值,必定要是1個數組,由於交錯數組的元素是1個數組類型的
                
                 爲交錯數組的元素的元素賦值
                 先經過索引器肯定交錯數組的元素 這個元素的類型是1個數組  再經過1個索引器肯定交錯數組的元素的元素  int[][] arr = { new int[] { 1, 2, 3, }, new int[] { 4, 5, 667, 8, 9 } };
                 arr[0][0]=12;
                
             
              4. 取值:
                
                
              5. 遍歷.
                 使用foreach遍歷,由於交錯數組的元素的類型是1個數組,因此迭代變量的類型也應該是1個數組.
                 而後再遍歷這個迭代變量.
                 foreach (int[] item in arr)
                 {
                    foreach(int i in item)
                    {
                        cw(i);
                    }
                 }
                 使用for循環來遍歷交錯數組,
                 for (int i = 0; i < arr.Length; i++)
                 {
                     arr[i]是交錯數的元素,這個元素是1個數組 還得遍歷這個arr[i]
                     for(int j=0;j<arr[i].Length;j++)
                     {
                         cw(arr[i][j]);
                     }
                 }
             
              

1    foreach (int[] item in arr)
2             {
3                 foreach (int i in item)
4                 {
5                     Console.Write(i+"\t");
6                 }
7                 Console.WriteLine();
8             }

                6. 表示1個表格數據,行肯定m,可是每1個行的列數不相同. 這個時候就可使用交錯數組.

相關文章
相關標籤/搜索