第六章:陣列、集合與泛型
因為第四章要運用到陣列,所以先提一下第六章順便補充說明一下第三章提供的實值型別與參考型別的差異,放在最後的補充說明
陣列總覽
寫程式時經常用到的陣列,卻不知道原來陣列也有名字
int a[] - 一般陣列
int a[,] - 多維陣列
int a[][] - 不規陣列(又稱陣列中的陣列)
一般陣列就不多說了,多維陣列和不規則陣列的差異在初始及應用不同。
多維陣列初始就知道大小
int[,] a=new int[2,3];
而不規則陣列則是先宣告一維陣列的大小
int[][] a=new int[2][];
再決定子陣列大小
a[2]=new int[5];
第四章:方法和運算子
宣告方法的參數列
- 輸入參數 PassByVal
- 參考參數 PassByRef
- 輸出參數 PassByOut
- 參數陣列 PassByParam
第一種輸入參數就不多提了,來討論一下何時使用參考參數、何時使用輸出參數。
由於不像輸入參數會建立新的記憶體位置,參考參數是直接存取原參數記憶體位置,因此使用前必須事先宣告,不然你的VS就會跟你不高興,這點和輸出參數不同,輸出參數不用事先宣告,相對的你必須在輸出參數內宣告一個新的記憶體位置。
這裡我是提供自己的想法,如果有不對地方請多多指教
其實在.NET BCL中,很少看的到這二種運用,我一時想不到有參考參數的例子,倒是記得在很多的xxx.TryParse()中有out的運用,我的解釋是這樣的,如果你的方法已經有一個回傳值,但是又非得回傳更多的回轉值時,你就可以使用這二種參數,至於使用時機如DateTime.TryParse(string s,out DateTime result)就是一個典點的事先不會預設值,而是透過方法內建立一個新的記憶體位置後回傳,所以你可以這樣
DateTime result;
string s=“2009/02/14”;
DateTime.TryParse(s,out result);
另外何時用參考參數,例如方法很多,但都是使用同一個變數的時候,尤其各方法又各自有自己的回傳值時
void check(ref People user)
{
if(check2(user))
check3(user);
else
check4(user);
}
資料轉換
一般有型別自己提供的Parse、TryParse,另外還有一種針對之前有提到的CTS提供的轉換類別Convert,使用方法像是
Convert.ToInt32(“5”);
Convert.ToBoolean(“True”);
補充說明
實值型別與參考型別的差異
int a=5;
int b=a;
這時候a=5,b=5。因為int是實值型別,因此b複製了a的值:
b=10;
這時候a=5,b=10。a還是5,而b更新了自己的值為10。
int[] aa={0,1,2};
int[] bb=aa;
bb[2]=3;
aa[2]的值是??
這時候aa[2]的值是3,因為bb=aa是複制了記憶體位置,因為陣列是參考型別。
說明文件
這邊提醒一下剛使用VS的工程師,微軟提供了非常豐富的說明文件,大部份都有多國語言,但是除了上http://msdn.microsoft.com自己尋找之外,如何透過VS來快速查詢,答案是你只要在你有疑問的程式段落上,以滑鼠點一下位置或圈選起來,接著按F1之後,VS就會幫你連結到最有可能的解答連結(當然如果你是使用本機的MSDN Library會比較快,不過網路上是資訊肯定是最新的)
沒有留言:
張貼留言