日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

第二阶段_第四家小节_C#基础2

發(fā)布時(shí)間:2024/9/30 C# 69 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第二阶段_第四家小节_C#基础2 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

?

第三小節(jié)

?

?

  • 方法重載

  • ?

    //方法重載:方法名稱相同,參數(shù)列表不同

    //適用性:在不同條件下,解決同一類問題

    //優(yōu)點(diǎn):讓調(diào)用者解決一類問題,記憶1個(gè)方法。

    ?

    要求:返回值相同

  • 練習(xí)分鐘小時(shí)的重載

  • ?

  • ref——引用參數(shù)

  • 引用參數(shù),為地址,相當(dāng)于指針。

    ?

    ?

    ?

  • out——輸出參數(shù)

  • 輸出參數(shù)類似引用參數(shù),但輸出參數(shù)在函數(shù)中必須修改調(diào)用方法前可以不賦值

    ?

    ?

    ?

  • 一維數(shù)組

  • ?

    ?

  • 數(shù)組讀取

  • ?

    ?

  • 練習(xí)

  • ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

  • 錄入成績練習(xí)

  • ?

    ?

    ?

    ?

    ?

  • 獲取最大值練習(xí)

  • ?

    ?

  • 數(shù)組寫法與練習(xí)

  • ?

  • 計(jì)算今年第幾天

  • ?

    ?

    ?

    ?

    ?

    ?

  • 練習(xí)自學(xué)Array的方法

  • Forreach

  • :只能讀

    :全部

    ?

    依次讀取全部元素。

    ?

    ?

    ?

  • 數(shù)組簡元素進(jìn)行比較

  • ?

    ?

  • 冒泡排序

  • 缺點(diǎn):通常交換次數(shù)過多。

    ?

    ?

  • 選擇排序(性能提升)

  • ?

    ?

    ?

  • Params

  • 意義:簡化調(diào)用者的調(diào)用難度。

    ?

    ?

    形式用法:

    ?

    調(diào)用:

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

  • 二維數(shù)組

  • 形式:

  • ?

    ?

    ?

    從下到上,從右到左

    ?

    ?

    ?

    ?

    ?

    ?

    ?

  • 聲明

  • ?

  • 從左到右,從上到下

  • ?

  • 從右到左,從下到上

  • ?

  • 用法:

  • ?

  • arr.length//表示行數(shù)*列數(shù);

  • arr.Getength(0);// 行數(shù)

  • arr.Getlength(1);// 列數(shù)

  • ?

    ?

  • 相關(guān)語法

  • ?

  • Array 數(shù)組基類(父類)

  • object 萬類之祖

  • var 隱式(推斷)類型

  • ?

  • Array的API

  • ?

    ?

    ?

    ?

  • 交錯(cuò)數(shù)組

  • ?

    ?

    特點(diǎn):參差不齊的數(shù)組

    ?

    長短不一的數(shù)組,交錯(cuò)數(shù)組的每個(gè)元素都是一維數(shù)組。

    [1][ ][2]

    [ ][ ][ ][3][ ]

    [ ][ ][4][ ]

    創(chuàng)建具有3個(gè)元素的交錯(cuò)數(shù)組(3行)

    int[][] array;

    array = new int[3][];--->前邊方括號填包括幾個(gè)一維數(shù)組,后邊方括號里不能加?xùn)|西

    賦值:

    array[0] = new int[3];

    array[1] = new int[5];

    array[2] = new int[4];

    長度可相同。

    //將數(shù)據(jù)1賦值給交錯(cuò)數(shù)組的第一個(gè)元素的第1個(gè)元素

    array[0][0] = 1;

    array[0][2] = 2;

    array[1][2] = 3;

    array[2][1] = 4;

    讀取array:(遍歷交錯(cuò)數(shù)組)

    foreach(var item in array)

    {

    foreach(var element in item)

    {

    Console.WriteLine(element);

    }

    }

    //交錯(cuò)數(shù)組.Length 交錯(cuò)數(shù)組元素總數(shù)(行數(shù))

    //交錯(cuò)數(shù)組[索引].Length 交錯(cuò)數(shù)組元素的元素總數(shù)(某一行的列數(shù))

    for(int r=0;r<array.Length;r++)//交錯(cuò)數(shù)組的元素?cái)?shù)

    {

    for(int c =0;c<array[r].Length;c++)//交錯(cuò)數(shù)組第一個(gè)元素的元素?cái)?shù)

    {

    Console.WriteLine(array[r][c]);

    }

    }

    ?

    ?

    ?

    ?

  • 形式:

  • float[][] arr3 = new float[3][];

    //創(chuàng)建一維數(shù)組賦值給交錯(cuò)數(shù)組的第一個(gè)元素

    arr3[0] = new float[2];

    arr3[1] = new float[4];

    arr3[2] = new float[3];

    //將數(shù)據(jù)1賦值給交錯(cuò)數(shù)組的第一個(gè)元素的第二個(gè)元素

    arr3[0][1] = 1;

    arr3[1][0] = 2;

    arr3[2][2] = 3;

  • 獲取所有元素

  • Foreach

  • foreach (float[] item in arr3)//遍歷交錯(cuò)數(shù)組的元素(一維數(shù)組)

    {

    foreach (var element in item)//遍歷交錯(cuò)數(shù)組元素的元素

    {

    Console.WriteLine(element);

    }

    }

  • For

  • for (int r = 0; r < arr3.Length; r++)

    {

    for (int c = 0; c < arr3[r].Length; c++)

    {

    Console.Write(arr3[r][c] +"\t");

    }

    Console.WriteLine();

    }

    }

    ?

    ?

  • arr3.Length 交錯(cuò)數(shù)組的元素?cái)?shù)

  • arr3[0].Length 交錯(cuò)數(shù)組第一個(gè)元素的元素?cái)?shù)

  • ?

    ?

  • 復(fù)習(xí)

  • ?

    ?

    ?

    ?

    ?

  • 參數(shù)數(shù)組

  • 使用params關(guān)鍵字定義的

    只能用于形參列表

    ?

    ?

    ?

    ?

    1.原始

  • 參數(shù)數(shù)組

  • 正常數(shù)組整數(shù)相加

  • 整數(shù)相加需求//參數(shù)個(gè)數(shù)不確定,類型確定

    形式:

    static int Add(int[] arr)

    ?

    調(diào)用:

    Int sum =add(new int[]{1,2,3,4,5});

    ?

  • 參數(shù)數(shù)組整數(shù)相加

  • 形式:

    整數(shù)相加需求//參數(shù)個(gè)數(shù)不確定,類型確定

    static int Add(params int[] arr)

    ?

    調(diào)用:

    Int sum =add(1,2,3,4,5);

    ?

    ?

    對于調(diào)用者來說更方便,對于方法內(nèi)部而言,就是普通一維數(shù)組

    整數(shù)相加的方法:(個(gè)數(shù)不確定,類型能確定)

    用到params的數(shù)組要放在形參最后面, Add(int a,params int[] arr)

    private static int Add(params int[] arr)【params 可以使調(diào)用者直接傳遞一組數(shù)據(jù)類型相同的變量集合,也可以不傳】

    {

    int sum;

    for(int i =0;i<arr.Length;i++)

    {

    sum+=arr[i];

    }

    }

    foreach也可,因?yàn)閒oreach只對自身只讀,這里是sum 變化,foreach不變化

    Main()

    {

    //int a=Add(new int[]{1,2,3,4,5});

    int a = Add(1,2,3,4,5);---->用了params 就不用再new int[]

    int b = Add();--->用了params也可以不傳

    }

    ?

  • 復(fù)習(xí)

  • ?

    ?

    ?

    ?

    ?

  • 彩票練習(xí)

  • ?

    ?

  • 答案

  • ?

    private static void Main2()

    {

    int[] myTicket = BuyTicket();

    ?

    Console.WriteLine("我買的彩票:");

    PrintTicket(myTicket);

    Console.WriteLine("驗(yàn)證我的中獎(jiǎng)潛力……");

    ?

    int count = 0;

    int level;

    do

    {

    count++;

    int[] ticket = CreateTicket();

    //購買彩票與開獎(jiǎng)彩票對比

    level = TicketEquals(myTicket, ticket);

    ?

    Console.WriteLine("*********開獎(jiǎng)號碼:*********");

    PrintTicket(ticket);

    ?

    if (level != 0)

    Console.WriteLine("恭喜,{0}等獎(jiǎng)。累計(jì)花費(fèi):{1}元", level, count * 2);

    } while (level != 1);

    }

    ?

    private static int[] BuyTicket()

    {

    int[] ticket = new int[7];

    ?

    for (int i = 0; i < ticket.Length - 1; )

    {

    Console.WriteLine("請輸入第{0}個(gè)紅球號碼:", i + 1);

    int redNumber = int.Parse(Console.ReadLine());

    ?

    if (redNumber < 1 || redNumber > 33)

    Console.WriteLine("您輸入的數(shù)字超過紅球號碼范圍:1--33");

    //[重點(diǎn):判斷輸入的號碼在數(shù)組中是否存在]

    else if (Array.IndexOf(ticket, redNumber) >= 0)

    Console.WriteLine("當(dāng)前數(shù)字已經(jīng)存在,請重新錄入");

    else

    ticket[i++] = redNumber;

    }

    ?

    int blueNumber;

    do

    {

    Console.WriteLine("請輸入籃球號碼:");

    blueNumber = int.Parse(Console.ReadLine());

    if (blueNumber >= 1 && blueNumber <= 16)

    ticket[6] = blueNumber;

    else

    Console.WriteLine("請輸入數(shù)字超過籃球號碼:1--16");

    } while (blueNumber < 1 || blueNumber > 16);//數(shù)字不在1--16之間 再次執(zhí)行

    ?

    return ticket;

    }

    ?

    private static Random ran = new Random();

    private static int[] CreateTicket()

    {

    int[] ticket = new int[7];

    //[重點(diǎn):生成多個(gè)不重復(fù)的隨機(jī)數(shù)]

    for (int i = 0; i < 6; )

    {

    //思路:生成隨機(jī)數(shù),判斷是否存在,不在則存儲

    int num = ran.Next(1, 34);

    if (Array.IndexOf(ticket, num) == -1)

    ticket[i++] = num;

    }

    ticket[6] = ran.Next(1, 17);

    //紅球號碼排序[重點(diǎn):指定范圍的排序]

    Array.Sort(ticket, 0, 6);

    return ticket;

    }

    ?

    private static int TicketEquals(int[] myTicket1, int[] ranTicket2)

    {

    //判斷紅球號碼中獎(jiǎng)數(shù)量

    //思路:我的第1個(gè)號碼在隨機(jī)彩票的紅球號碼段中是否存在

    // 我的第2個(gè)號碼在隨機(jī)彩票的紅球號碼段中是否存在

    //[重點(diǎn):在指定范圍內(nèi)檢查是否具有相同元素]

    int redCount = 0;

    ?

    for (int i = 0; i < 6; i++)

    {

    if (Array.IndexOf(ranTicket2, myTicket1[i], 0, 6) != -1)

    redCount++;

    }

    ?

    int blueCount = myTicket1[6] == ranTicket2[6] ? 1 : 0;

    ?

    int level;

    if (redCount + blueCount == 7)

    level = 1;

    else if (redCount == 6)

    level = 2;

    else if (redCount + blueCount == 6)

    level = 3;

    else if (redCount + blueCount == 5)

    level = 4;

    else if (redCount + blueCount == 4)

    level = 5;

    else if (blueCount == 1)

    level = 6;

    else

    level = 0;

    return level;

    }

    ?

    private static void PrintTicket(int[] ticket)

    {

    for (int i = 0; i < ticket.Length; i++)

    {

    Console.Write(ticket[i] + "\t");

    }

    Console.WriteLine();

    }

    ?

    ?

  • 輸出#號練習(xí)

  • ?

    ?

    ?

    ?

    ?

    ?

    ?

  • 冒泡排序:發(fā)現(xiàn)【更】小的則交換

  • ?

    ?

    ?

    ?

  • 圖片

  • ?

  • 代碼

  • //缺點(diǎn):通常交換次數(shù)過多。

    private static int[] OrderBy1(int[] array)

    {

    //1.取數(shù)據(jù)

    for (int r = 0; r < array.Length - 1; r++)

    {

    //2.比較

    for (int c = r + 1; c < array.Length; c++)

    {

    //3.發(fā)現(xiàn)更小則交換

    if (array[r] > array[c])

    {

    int temp = array[r];

    array[r] = array[c];

    array[c] = temp;

    }

    }

    }

    return array;

    }

    ?

  • 選擇排序:發(fā)現(xiàn)【最】小的則交換

  • 圖片

  • ?

  • 代碼

  • ?

    private static int[] OrderBy(int[] array)

    {

    //1.取數(shù)據(jù)

    for (int r = 0; r < array.Length - 1; r++)//輪

    {

    //2.查找最小索引

    int minIndex = r;//假設(shè)下當(dāng)前元素就是最小索引

    for (int c = minIndex +1; c < array.Length; c++)//次

    {

    //發(fā)現(xiàn)更小的元素

    if (array[minIndex] > array[c])

    {

    //記錄位置(替換假設(shè)的最小索引)

    minIndex = c;

    }

    }

    //3.交換

    if (minIndex != r)

    {

    int temp = array[minIndex];

    array[minIndex] = array[r];

    array[r] = temp;

    }

    }

    return array;

    }

    ?

    ?

  • 2048核心算法

  • ?

    //*******************2048核心算法*****************************************

    /*需求分析1.0

    1.向上移動

    --- 獲取列數(shù)據(jù),形成一維數(shù)組

    * --- 去除零元素(將非零元素向前移動)

    * ---合并數(shù)據(jù)

    * -- 如果相鄰元素相同

    * -- 將后一個(gè)元素累加到前一個(gè)元素上

    * -- 將后一個(gè)元素清零

    * --- 去除合并過程中產(chǎn)生的零元素(將非零元素向前移動)

    * --- 還原列數(shù)據(jù)

    *

    2.向下移動

    --- 獲取列數(shù)據(jù),形成一維數(shù)組

    * --- 去除零元素(將非零元素向后移動)

    * ---合并數(shù)據(jù)

    * -- 如果相鄰元素相同

    * -- 將前一個(gè)元素累加到后一個(gè)元素上

    * -- 將前一個(gè)元素清零

    * --- 去除合并過程中產(chǎn)生的零元素(將非零元素向后移動)

    * --- 還原列數(shù)據(jù)

    ?

    *

    需求分析2.0

    1.向上移動

    --- 獲取列數(shù)據(jù)(從上到下),形成一維數(shù)組

    --- 調(diào)用合并數(shù)據(jù)方法

    * --- 還原列數(shù)據(jù)(從上到下)

    *

    2.向下移動

    --- 獲取列數(shù)據(jù)(從下到上),形成一維數(shù)組

    --- 調(diào)用合并數(shù)據(jù)方法

    * --- 還原列數(shù)據(jù)(從下到上)

    *

    3.合并數(shù)據(jù)

    * --- 調(diào)用去除零元素

    * ---合并數(shù)據(jù)

    * -- 如果相鄰元素相同

    * -- 將后一個(gè)元素累加到前一個(gè)元素上

    * -- 將后一個(gè)元素清零

    * --- 調(diào)用去除零元素

    ?

    4.去零方法(將非零元素向前移動)

    */

    ?

  • 答案

  • ?

  • 移動零

  • private static void RemoveZero(int[] array)

    {

    //創(chuàng)建新數(shù)組0 0 0 0

    int[] newArray = new int[array.Length];

    int newIndex = 0;//新數(shù)組索引

    //將參數(shù)中非零元素,依次存入新數(shù)組2 2 2 0

    for (int i = 0; i < array.Length; i++)

    {

    if (array[i] != 0)

    {

    newArray[newIndex++] = array[i];// 存入 自增

    }

    }

    //返回新數(shù)組

    //return newArray;

    //array = newArray;//修改棧中引用

    newArray.CopyTo(array, 0); //拷貝元素 array[0] = newArray[0];

    }

    ?

  • 合并相同項(xiàng)

  • private static void Merge(int[] array)

    {

    RemoveZero(array);//2 0 2 2 --> 2 2 2 0

    //合并數(shù)據(jù)

    for (int i = 0; i < array.Length-1; i++)

    {

    //非零 且 相鄰相同

    if (array[i] !=0 && array[i] == array[i + 1])

    {

    array[i] += array[i + 1];

    array[i + 1] = 0;

    }

    }

    RemoveZero(array);

    //return array;

    }

  • 向上移動

  • ?

    private static void MoveUp(int[,] map)

    {

    int[] mergeArray = new int[map.GetLength(0)];

    for (int c = 0; c < map.GetLength(1); c++)

    {

    //00 10 20 30

    for (int r = 0; r < map.GetLength(0); r++)//從上到下 獲取列數(shù)據(jù)

    mergeArray[r] = map[r, c];

    ?

    Merge(mergeArray);

    ?

    for (int r = 0; r < map.GetLength(0); r++)//從上到下 還原列數(shù)據(jù)

    map[r, c] = mergeArray[r];

    }

    //return map;

    }

  • 向下移動

  • private static void MoveDown(int[,] map)

    {

    int[] mergeArray = new int[map.GetLength(0)];

    for (int c = 0; c < map.GetLength(1); c++)

    {

    //30 20 10 00

    for (int r = map.GetLength(0) - 1; r >= 0; r--)

    mergeArray[3 - r] = map[r, c];//正向存入一維數(shù)組

    ?

    Merge(mergeArray);

    ?

    for (int r = map.GetLength(0) - 1; r >= 0; r--)

    map[r, c] = mergeArray[3 - r];

    }

    //return map;

    }

  • 輸出顯示

  • private static void PrintMap(int[,] map)

    {

    for (int r = 0; r < map.GetLength(0); r++)

    {

    for (int c = 0; c < map.GetLength(1); c++)

    {

    Console.Write(map[r, c] + "\t");

    }

    Console.WriteLine();

    }

    }

    ?

    //移動 Move(1 , map)

    //導(dǎo)醫(yī)

  • 移動

  • private static void Move(int direction,int[,] map)

    {

    switch (direction)

    {

    case 0:

    MoveUp(map);

    break;

    case 1:

    MoveDown(map);

    break;

    }

    }

    ?

    //目的:讓2048算法使用者,可以只記憶一個(gè)Move方法。

  • 移動重寫

  • private static void Move(MoveDirection direction, int[,] map)

    {

    switch (direction)

    {

    case MoveDirection.Up:

    MoveUp(map);

    break;

    case MoveDirection.Down:

    MoveDown(map);

    break;

    }

    }

  • 主函數(shù)

  • static void Main()

    {

    int[,] map = new int[4, 4]

    {

    { 2,4,0,4 },

    { 0,2,2,4 },

    { 2,0,0,2 },

    { 4,2,2,0 }

    };

    PrintMap(map);

    Console.WriteLine("向上移動");

    //MoveUp(map);//用戶需要記憶的方法過多

    //Move(0, map);//用戶輸入的方向不明確

    Move(MoveDirection.Up, map);//限定了取值范圍

    ?

    PrintMap(map);

    ?

    Console.WriteLine("向下移動");

    //MoveDown(map);

    Move(MoveDirection.Down, map);

    PrintMap(map);

    ?

    }

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

  • 數(shù)據(jù)類型

  • ?

  • 類型圖示

  • ?

    ?

    ?

    ?

  • 值類型和引用類型圖示

  • ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    Int[] arr;//在棧中聲明。A為位地址

    arr= new int[]{1}

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

  • 沒有【】就是改棧(重新開辟空間,附地址),有就是改堆。

  • String a="1"

    String b=a

    B="5"

    S2="1"

    ?

    ?

    ?

    ?

  • 面試:Stringbuilder與string的區(qū)別于優(yōu)越性差異

  • ?

    ?

    ?

    ?

    ?

    ?

  • 應(yīng)用1:賦值

  • ?

  • 圖示

  • ?

    ?

    ?

  • 代碼

  • static void Main3()

    {

    //方法執(zhí)行在棧中

    //方法內(nèi)部聲明的變量,都在棧中分配空間。

    int a;//在棧中

    a = 1;//數(shù)據(jù)1在棧中( 因?yàn)橹殿愋椭苯哟鏀?shù)據(jù) )

    int b = a;//a將存儲的數(shù)據(jù)賦值b

    a = 2;//修改棧中存儲的數(shù)據(jù)

    Console.WriteLine(b);//?

    ?

    //arr:數(shù)組的引用

    int[] arr;//在棧中

    arr = new int[] { 1 };//數(shù)組對象在堆中(引用類型數(shù)據(jù)在堆中)

    int[] arr2 = arr;//arr將存儲的引用賦值給arr2

    //arr[0] = 2;//修改堆中存儲的數(shù)據(jù)(數(shù)組對象)

    arr = new int[] { 2 };//修改棧中存儲的引用

    Console.WriteLine(arr2[0]);//?

    ?

    string s1 = "老王";

    string s2 = s1;//s1將存儲的引用賦值給s2

    s1 = "老宋";//修改棧中存儲的引用,重新開辟空間存儲"老宋",替換棧中引用

    Console.WriteLine(s2);//?

    ?

    object o1 = 100;

    object o2 = o1;//將o1存儲的引用賦值給o2

    o1 = 200;//修改棧中存儲的引用,重新開辟空間存儲200,替換棧中引用

    Console.WriteLine(o2);//?

    }

    ?

  • 應(yīng)用2:比較

  • ?

    ?

  • 圖示

  • ?

    ?

    ?

    ?

    ?

  • 代碼

  • static void Main4()

    {

    //值類型存數(shù)據(jù),比較數(shù)據(jù)

    int a = 1, b = 1;

    bool r1 = a == b;//比較數(shù)據(jù)1

    Console.WriteLine(r1);//true

    ?

    //引用類型存引用,比較引用

    int[] arr01 = { 1 }, arr02 = { 1 };

    bool r2 = arr01 == arr02;//比較數(shù)組引用

    bool r3 = arr01[0] == arr02[0];//比較數(shù)組元素

    Console.WriteLine(r2);//?

    }

    ?

  • 應(yīng)用3:傳參

  • ?

  • 圖示

  • ?

    ?

    ?

    ?

  • 代碼

  • static void Main5()

    {

    int a1 = 1;

    int[] arr1 = { 1 };

    Fun1(a1, arr1);//a1將存儲的數(shù)據(jù)1、arr1將存儲的引用 傳入方法

    Console.WriteLine(a1);//?1

    Console.WriteLine(arr1[0]);//?2

    ?

    int a2 = 1;

    Fun2(ref a2);//將a2自身地址傳入方法

    Console.WriteLine(a2);//2

    ?

    //區(qū)別2:輸出參數(shù)進(jìn)入方法前可以不賦值

    int a3;//意圖:接收方法的結(jié)果

    Fun3(out a3);//將a2自身地址傳入方法

    Console.WriteLine(a3);//2

    }

    ?

    ?

  • 方法參數(shù):值參數(shù)、引用參數(shù)、輸出參數(shù)

  • 根據(jù)傳遞方式進(jìn)行的劃分。

  • 值參數(shù):按值傳遞 --- 傳遞實(shí)參變量所存儲的內(nèi)容

  • 作用:傳遞信息

    ?

    局部變量:在棧中,全局變量,不在

    方法內(nèi)種局部變量,為

    private static void Fun1(int a,int[] arr)

    {

    //結(jié)論:引用類型,方法內(nèi)部修改堆中數(shù)據(jù),影響實(shí)參。

    a = 2;

    arr[0] = 2;//堆中數(shù)據(jù)

    //arr = new int[] { 2 };//修改棧中引用

    }

    ?

  • 引用參數(shù):按引用傳遞 --- 傳遞實(shí)參變量自身引用(內(nèi)存地址)

  • //作用:改變數(shù)據(jù)

    private static void Fun2(ref int a)

    {//方法內(nèi)部修改形參,等同于修改實(shí)參

    a = 2;

    }

    ?

  • 輸出參數(shù):按引用傳遞 --- 傳遞實(shí)參變量自身引用(內(nèi)存地址)

  • //作用:返回結(jié)果

    private static void Fun3(out int a)

    {//區(qū)別1:方法內(nèi)部必須修改輸出參數(shù)

    a = 2;

    }

    ?

    static void Main6()

    {

    int num01 = 1, num02 = 2;

    SwopNumber(ref num01, ref num02);

    ?

    int area,per;

    CalculateRect(10, 20, out area, out per);

    ?

    ?

    string input = Console.ReadLine();

    //int atk = int.Parse(input);

    ?

    //嘗試著轉(zhuǎn)換,如果成功通過輸出參數(shù)返回結(jié)果。

    // 如果失敗,可以通過返回值獲取結(jié)果。(木有異常)

    int result;

    if (!int.TryParse(input, out result))

    {

    Console.WriteLine("失敗嘍");

    }

    }

    ?

    ?

  • 應(yīng)用練習(xí)

  • 交換兩個(gè)整數(shù)

  • 矩形面積

  • ?

    ?

    ?

  • 裝箱yu拆箱

  • ?

    ?

    ?

    ?

    ?

    面試:發(fā)生拆裝箱的數(shù)目

    例子:

    ILspy

    ?

    沒有拆裝箱,int number…….

    ?

    Concat字符串拼接,本質(zhì)是由concat,裝箱。。。。。。結(jié)局方案。.Tostring

    Int->object形參為object

    ?

    如果形參object,實(shí)參值類型,產(chǎn)生裝箱操作。

    ?

    ?

  • 解決方案

  • 1.

    2.泛型:可以將數(shù)據(jù)類型作為參數(shù)傳入。

    Private static void Fun2<Type>(To){

    }

    調(diào)用:Fun2<int>(To);

    ?

    //如果形參object類型,實(shí)參值類型。會產(chǎn)生裝箱操作。

    //解決方案:1.重載 2.泛型:可以將數(shù)據(jù)類型作為參數(shù)傳入方法。

    ?

    ?

  • String

  • ?

    ?

  • 特性1:字符串池(字符串常量)

  • // 節(jié)省內(nèi)層

    ?

    string s1 = "老王";

    string s2 = "老王";

    //s1 / s2 是同一對象

    ?

    string s3 = new string(new char[] { '老', '宋' });

    string s4 = new string(new char[] { '老', '宋' });

    //s3 / s4 不是同一對象

    ?

    ?

    ?

    ?

  • 特性2:不可變性

  • // 如果可變,就會破壞其他對象的內(nèi)存空間

    string s5 = "張飛";

    s5 = "夏軍軍";//重新開辟空間 存儲新字符串,替換棧中引用。

    //s5[0] = '夏';

    char c1 = s5[0];

    Console.WriteLine(s5);//? "張飛" -改變-> "夏軍"

    ?

    string s6 = "老";

    string s7 = s6 + "王";//"老王" 與 s1/s2 不是同一對象 "字符串變量參與的拼接,沒有使用字符串池的特性"

    ?

    string s8 = string.Empty;//""

    for (int i = 0; i < 10; i++)

    {

    //每次拼接都會產(chǎn)生一個(gè)新對象,產(chǎn)生1個(gè)垃圾

    s8 = s8 + i.ToString();

    //"" + "0"

    //"0" +"1"

    //"01" +"2"

    }

    Console.WriteLine(s8);//?

    ?

    ?

    ?

  • 可變字符串

  • ?

    ?

    ?

    ?

  • String和stringbuilder的優(yōu)缺點(diǎn)

  • ?

    ?

    ?

  • 重點(diǎn)與練習(xí)

  • ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    總結(jié)

    以上是生活随笔為你收集整理的第二阶段_第四家小节_C#基础2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。