本週重點:
- Reference Type有宣告ref 跟 沒有宣告,還是有差的。
- Method的具名參數及選擇性參數(C# 4.0 以上)
================================================
- 參數的傳遞
- 輸入參數
- Value Type
- Reference Type
- object
傳入Method後,當object沒有new instance時,會變更原始的object。但若有new新的instance時,即會複製一個新的,並不會變更原始的object。
※若為ref 參考參數時,即使new新的instance,仍會變更原來的物件。因為他是直接拿外部的參數來使用的。
- object
- String
在Method只要有對string重新設定值時,即為new 新的instance。結果同b1,並不會更改到外部的參數值。
- 參考參數
無論是否有new instance,皆會改變原始的外部參數值。
static void Main(string[] args)
{
int i = 10;
passValueType(i);
Class1 c1 = new Class1();
c1.i = 10;
passRefType(c1); //c1.i=10
passRefType(ref c1); //c1.i=2000
string s = "abc";
passString(s); //s=abc
passString(ref s); //s=ooxx
}
static void passValueType(int j)
{
j = 100;
}
static void passRefType(Class1 c2)
{
//c2.i = 100; =>會影響改變到傳入的object
c2 = new Class1(); //重新建立object,並不會改變外部傳入的值
c2.i = 100;
}
//使用ref傳入,就算物件重新new過,還是會改變原始的傳入物件。
static void passRefType(ref Class1 c3)
{
c3 = new Class1();
c3.i = 2000;
}
static void passString(string s2)
{
s2="xyz"; //字串在設定 = 時,即為重新建立新物件。
}
static void passString(ref string s2)
{
s2 = "ooxx";
}
- 選擇性參數(c# 4.0)
作用:在宣告Method時,可以選擇性不傳入參數,而以初始值代替。
宣告方式:於宣告Method時,設定預設參數值即可。但是需要在最後面。
static void showMessage( string s, string s2="demo2", string s3="demo3") |
- 具名參數(c# 4.0)
作用:在宣告Method時,可以選擇性只傳入指定參數。
宣告方式:使用「參數名稱:傳入值」來呼叫Method。
showMessage("aaa", s3: "ccc");
- 數值的轉換
string s = i.ToString("c"); //NT$5,000
//i = int.Parse(s); //X, FormatException
i = int.Parse(s, System.Globalization.NumberStyles.Currency);
- DateTime的轉換
//http://msdn.microsoft.com/zh-tw/library/ey1cdcx8(v=vs.95).aspx
//將yyyyMMdd轉為日期格式
string sd = "20121022";
DateTime d2 = DateTime.ParseExact(sd, "yyyyMMdd",
new System.Globalization.CultureInfo("zh-tw", true),
System.Globalization.DateTimeStyles.AllowWhiteSpaces);
Post your comments