你們好,我叫李京陽,,很高興認識你們,之因此我想開一個本身的博客,就是來把本身所瞭解的知識點經過本身的話寫一下,但願被博客園的朋友們點評和一塊兒討論一下,也但願從博客園中多認識一些軟件開發人員!如今我開始講一下面向對象的一點知識,請大家多多點評和討論!!程序員
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個行的列數不相同. 這個時候就可使用交錯數組.