App下載

C# 編程學(xué)習(xí)系列(十)方法

迪士尼在逃公主 2021-12-18 10:56:30 瀏覽數(shù) (3602)
反饋

1、什么是方法?

方法即將相關(guān)的代碼語(yǔ)句組織在一起,用來(lái)執(zhí)行一個(gè)任務(wù)的代碼塊。

那么方法的作用是什么?

一是減少冗余代碼,讓程序看起來(lái)不那么臃腫雜亂。

二是便于后期閱讀和維護(hù)代碼。

例如:挖礦這件事兒。

如果沒有專門的方法,那么每一次挖礦,就需要寫一次關(guān)于挖礦的全部代碼。這樣下來(lái),代碼就會(huì)非常多,而且在后面要修改代碼的時(shí)候,每個(gè)位置都要修改,可謂麻煩至極。

而有了方法,只需要將挖礦的一系列操作丟進(jìn)一個(gè)方法里面,當(dāng)你要挖礦的時(shí)候,只要調(diào)用該方法,就可以了。后面計(jì)算是要增刪改方法中的功能,也只需要對(duì)這一個(gè)方法進(jìn)行操作即可。

2、方法的組成

方法組成格式:

<訪問修飾符> [static] <返回類型> <方法名>(參數(shù)類型1 參數(shù)名1,參數(shù)類型2 參數(shù)名2...)
{
    方法體
}

  • 訪問修飾符:決定了該方法能否被其他類可見。例如:public ,是所有人可見;而 private,只能自己可見。
  • static:表示靜態(tài),在某個(gè)類中是唯一的。若方法用static修飾,不需要實(shí)例化類對(duì)象,可以直接類名點(diǎn)方法名調(diào)用;如果沒有static修飾,則需要實(shí)例化類對(duì)象來(lái)使用。
  • 返回類型:決定了方法最后返回值的數(shù)據(jù)類型。這里除了 void 不需要 return,其他所有類型都需要 return 來(lái)返回值。
  • 方法名:即方法的名字,當(dāng)將方法寫好,要調(diào)用方法的時(shí)候,可以直接通過(guò)方法名來(lái)調(diào)用。
  • 參數(shù):參數(shù)可以有多個(gè),也可以沒用。每個(gè)參數(shù)都要有對(duì)應(yīng)的數(shù)據(jù)類型和參數(shù)名,參數(shù)名是在方法中調(diào)用。
  • 方法體:即要實(shí)現(xiàn)某個(gè)任務(wù)寫的代碼語(yǔ)句。

3、方法調(diào)用實(shí)例

(1)不使用static修飾:

class c1{
    static void Main(string[] args){
        int n1 = 20;
        int n2 = 30;
        c1 c1 = new c1();
        int count = c1.addNum(n1, n2);
        Console.WriteLine($"{n1}+{n2}={count}"); // 20+30=50
    }

    
    public int addNum(int num1, int num2){
        int num = num1 + num2;
        return num
    }
}

(2)使用static修飾:

class c1{
    static void Main(string[] args){
        int x = 300;
        int y = 100;

        
        c2.swap(x, y);
        Console.WriteLine($"交換后,x為{x}, y為{y}");
    }
}


class c2{
    public static void swap(int n1, int n2){
        Console.WriteLine("我真的被調(diào)用了!");
        int temp = n1;
        n1 = n2;
        n2 = temp;
    }
}

從打印結(jié)果可以知道,c2 中的 swap 方法確實(shí)已經(jīng)被調(diào)用了,可是結(jié)果沒有改變。

這是因?yàn)樵摲椒ㄋ褂玫氖?strong>按值傳遞參數(shù),方法中的 n1 和 n2 是形參,而調(diào)用方法時(shí) x 和 y 是實(shí)參。實(shí)參和形參是在兩個(gè)不同內(nèi)存中的值,當(dāng)調(diào)用方法的時(shí)候,實(shí)參的值會(huì)賦值給形參。這時(shí)候形參雖然發(fā)生了改變,但也不會(huì)影響到實(shí)參的值。

如果想要獲得結(jié)果,要將返回類型 void 改為 int,在結(jié)尾return回兩個(gè)值。調(diào)用方法的時(shí)候,將值賦給x和y即可。

除此之外,還有其他的方法來(lái)解決該問題。

4、參數(shù)傳遞

參數(shù)傳遞的方式有三種,分別是:按值傳遞參數(shù)、按引用傳遞參數(shù)和按輸出傳遞參數(shù)。按值傳遞參數(shù)上面已經(jīng)有了展示,就不多介紹了。

(1)按引用傳遞參數(shù)

引用參數(shù)是一個(gè)對(duì)變量的內(nèi)存位置的引用。當(dāng)按引用傳遞參數(shù)時(shí),與值參數(shù)不同的是,它不會(huì)重新為這些參數(shù)創(chuàng)建一個(gè)新的存儲(chǔ)位置。引用參數(shù)與提供給方法的實(shí)際參數(shù)是具有相同的內(nèi)存位置。

換句話說(shuō),形參改變了,那么實(shí)參也將會(huì)改變。

注:在C#中,引用參數(shù)是需要用ref關(guān)鍵字來(lái)聲明的。

class c1{
    static void Main(string[] args){
        int x = 300;
        int y = 100;

        
        Console.WriteLine($"交換前,x為{x}, y為{y}");

        
        c2.swap(ref x, ref y);
        Console.WriteLine($"交換后,x為{x}, y為{y}");
    }
}


class c2{
    public static void swap(ref int n1, ref int n2){
        int temp = n1;
        n1 = n2;
        n2 = temp;
    }
}

從結(jié)果來(lái)看,形參改變了,實(shí)參也發(fā)生了改變。

(2)按輸出傳遞參數(shù)

return 語(yǔ)句可用于只從函數(shù)中返回一個(gè)值。但是,可以使用輸出函數(shù)來(lái)從函數(shù)中反回兩個(gè)值。輸出參數(shù)會(huì)把方法輸出的數(shù)據(jù)賦給自己,其他方面與引用參數(shù)相似。

注:輸出參數(shù)需要用 out 關(guān)鍵字來(lái)修飾。

class c1{
    static void Main(string[] args){
        c1 c1 = new c1();
        int a = 100;
        Console.WriteLine($"調(diào)用方法前,a為{a}");
        c1.getValue(out a);
        Console.WriteLine($"調(diào)用方法后,a為{a}");
        c1.getValue(out int b);
        Console.WriteLine($"沒有賦值,b為");
    }

    
    public void getValue(out int x){
        int temp = 5;
        x = temp;
    }
}

和引用參數(shù)一樣,輸出參數(shù)一樣是和實(shí)際參數(shù)是同樣的內(nèi)存地址,輸出參數(shù)改變,實(shí)際參數(shù)也會(huì)改變。

不同的是,引用參數(shù)的實(shí)際參數(shù)需要賦值;而輸出參數(shù)的實(shí)際參數(shù)只需要聲明變量的類型,不需要變量初始值,它會(huì)自動(dòng)將方法中的值賦給該變量。

5、總結(jié)

(1)方法是為了減少重復(fù)代碼,便于后期的閱讀和維護(hù)。

(2)方法的組成:訪問修飾符、返回類型、方法名以及參數(shù)類型和參數(shù)名。

(3)靜態(tài)修飾符 static,可有可無(wú)。有則可以直接通過(guò)類名點(diǎn)方法名來(lái)調(diào)用,沒有則需要將類創(chuàng)建一個(gè)實(shí)例化。

(4)參數(shù)傳遞方式:按值傳遞參數(shù)、按引用傳遞參數(shù)和按輸出傳遞參數(shù)。

關(guān)于C#方法的一些基本內(nèi)容就到此結(jié)束了。

C#

0 人點(diǎn)贊