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é)束了。