App下載

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

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

1、什么是方法?

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

那么方法的作用是什么?

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

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

例如:挖礦這件事兒。

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

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

2、方法的組成

方法組成格式:

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

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

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

(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 方法確實已經(jīng)被調(diào)用了,可是結(jié)果沒有改變。

這是因為該方法所使用的是按值傳遞參數(shù),方法中的 n1 和 n2 是形參,而調(diào)用方法時 x 和 y 是實參。實參和形參是在兩個不同內(nèi)存中的值,當(dāng)調(diào)用方法的時候,實參的值會賦值給形參。這時候形參雖然發(fā)生了改變,但也不會影響到實參的值。

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

除此之外,還有其他的方法來解決該問題。

4、參數(shù)傳遞

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

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

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

換句話說,形參改變了,那么實參也將會改變。

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

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é)果來看,形參改變了,實參也發(fā)生了改變。

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

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

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

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ù)是同樣的內(nèi)存地址,輸出參數(shù)改變,實際參數(shù)也會改變。

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

5、總結(jié)

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

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

(3)靜態(tài)修飾符 static,可有可無。有則可以直接通過類名點方法名來調(diào)用,沒有則需要將類創(chuàng)建一個實例化。

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

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

C#

0 人點贊