1. 程式人生 > >第四周自學筆記

第四周自學筆記

第四周筆記:

過載
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進行修改
也只可以這樣改:
在這裡插入圖片描述