第四周自學筆記
第四周筆記:
過載
1.同名的兩個函式的簽名(引數的型別、順序、返回值的型別)不能完全一致;
2.和引數的名字無關;
3.函式的過載不管返回值型別;只有函式的型別和順序不一致才可以函式重名,函式返回值一致與否沒關係;比如說:
前面有
static void next(string boss)
{
If(boss==“毛”)
{
Console.writeline(“鄧”);
}
}
你再寫個static void next(string boss)是不可以的,哪怕是static int next(string boss)也不行。
目的:如果函式不能過載,太痛苦了。那麼如果重名,函式掉誰?所以這得有規矩
可變引數
如果要取出資料中的最大值
static void Main(string[] args)
{
int[] values = { 3, 5, 2, 9, 7 };
int i = Maxx(values);
//int i =Maxx(3,5,2,9,7);上面是兩行,也可以是這一行。?????????
Console.ReadKey(); } static int Maxx(int[] values) { int max = 0;//先定義一個最大值 foreach (int value in values) { if (value > max) { max = value; } } return max; }
那麼我們這樣:
static void Main(string[] args)
{
//int[] values = { 3, 5, 2, 9, 7 };
//int i = Maxx(values);
int j = Maxx(3, 5, 2, 97, 7);
Console.WriteLine(j);
Console.ReadKey(); } static int Maxx(params int[] values)//params int。看起來像max是一個引數,實際可以放進多個引數。即上面五個引數傳到Max裡變成了int陣列,如果(3, 5, 2, 97, 7,“tom”)顯然也不行。而(3,6,10)這樣三個也可以,所以這就是可變引數,數量可變。個數不確定的可變引數以陣列的形式傳遞。 { int max = 0;//首骸?先è定¨義?一?個?最?大洙?值μ foreach (int value in values) { if (value > max) { max = value; } } return max; }
那麼我們裡面除了有可變引數,還可以加別的:
class Program
{
static void Main(string[] args)
{
int j = Maxx(true,"afasdf",3, 5, 2, 97, 7);
Console.WriteLine(j);
Console.ReadKey();
}
static int Maxx(bool b,string msg,params int[] values)//隨便加的
{
Console.WriteLine(msg);//呀吼
int max = 0;
foreach (int value in values)
{
if (value > max)
{
max = value;
}
}
return max;
}
注意:可變引數一定要是所有引數的最後一個!
另外可以看出可變引數其實是一個數組,所以上面這個可以這麼提↓
Max(true,””,values)?????????沒看出特別的地方
那麼我們想以前哪裡用過可變引數嗎?
Console.Writelin(“{0},{1}”,3,5,6,9,3,3,90,9);
其實他這是
Writeline(string format,params object【】 arg)
引數預設值(C#4.0) :static void SayHello(string name,int age=20)
就是這麼個意思,預設是20歲,當用戶不輸入年齡時候就用20,輸入年齡就用使用者的
再比如也可以
static void SayHello(string name,int age=20,bool gender = true);
但注意預設值必須在非預設值之後。
其實這個功能在2010可以用,但2008版本是不可用的,那如果呈現這樣預設值的效果呢?對,是過載,在建構函式時候用的很多:
這是兩個函式,我設為w和m,ak 47對應w,而楊中科它對應m,來到m後變成了楊中科 20,從而在進入w。??????這個m
W和m是函式個數不一樣,從而構成了過載。
函式的ref、out引數
ref
這個程式會呈現:
1
2
1
在第八行int i1,是複製了一份i1傳到了DotIt,所以第八行再折騰的是複製品。
如果我就想折騰外邊的
這個程式出來的是 10 20 。因為穿進去的複製的,外邊的不會變。
那麼如果要折騰本身而不要複製品呢?
Ref 是reference的縮寫。編輯為ref就是要求呼叫者穿點變數的引用。從而會彈出20 10
注意之前必須要給變數賦值,因為這樣才可以用。
out
Ref和out 當然是目的不同。
這有一個返回值,其實還會有不成功,不合法的的時候,那麼還要有一個返回值來說名不成功麼,比如在函式int在跟個bool麼?不行,因為只有一個返回值,所以需要 out:
從而:
也可以if (b==true)
也需要有返回值,就return -1了
這其實就是表示,一個返回值是int 還有一個是是否返回成功的意思了
可以看出out的目的是讓函式返回不止一個返回值,雖然他放在的是引數的位置,但是她衝當是一個返回值的作用;第二個就是當給parse傳值的時候,沒必要給bool b = true賦值,因為給他賦值也不認,因為out處其實是返回值的意思,所以不需要給out附初值了。
會報錯。
特會報錯,因為其實out就是起到返回值作用,答應返回必須返回。所以說函式結束之前,在函式內部,要給out賦值。
以下是之前一個簡單程式,其實也是假定使用者一定輸入合法整數:
在實際中當然不是這樣,所以我們引入新的東東tryparse:
其實:
字串的處理
“f”長度為1的字串
‘f’字元
Char c =“f”------不對
String f =‘d’------不對
“”也可以是空的字串
‘f’和“f”區別,“”和null的區別----------
比如
String s =null
String s=“”
分辨是否為空字串:
或者
列印字串長度:
讀第三個字元型別:
亦可以為指定位置改值麼:
所以說只能讀,不能改。C#中字串有一個重要的特性:不可變性,字串一旦宣告就不再可以改變。所以只能通過索引來讀取指定位置的char,不能對指定位置的char進行修改
也只可以這樣改: