方法是一種組合一系列語句以執行乙個特定操作或計算乙個特殊結果的方式。
它能夠為構成程式的語句提供更好的結構和組織。
在物件導向的語言中,方法總是和類關聯在一起的,我們用類將相關的方法分為一組。
方法通過引數來用於從呼叫者向目標方法傳遞資料的變數。
方法也通過乙個返回值將資料返回給呼叫者
乙個方法呼叫由以下元素構成:命名空間、型別名稱、方法名稱、引數以及返回資料型別。
1、命名空間
命名空間是一種特殊的分類機制,它將與乙個特定功能有關的所有型別都分組到一起。
編譯器認為所有命名空間都在同乙個級別上。所以需要分別引用。
不會因為兩個命名空間的包含關係,而將其認為是乙個命名空間,而是兩個完全獨立、完全不同的命名空間。
用方法進行重構
將一組相關的語句轉移到乙個方法中,而不是隨意將它們嵌入乙個較大的方法中,
中重構的一種形式。重構有助於減少重複**。
return語句意味著跳到方法的末尾。
using指令(匯入命名空間,或者命名空間中的型別)
可以將來自乙個命名空間的型別匯入父命名空間**塊中。
雖然命名空間是巢狀的,但是using不會匯入任何巢狀的命名空間,巢狀的命名空間需要單獨的
顯式地匯入。
注:使用using system後,可以使用不同的大小寫形式來表示字串資料型別:string string
前乙個版本依賴using system指令,後乙個重酬使用string關鍵字。
兩者在c#中都合法地引用了system.string資料型別,最終生成 的cil**毫無區別。
using 可以出現在任何乙個地方,但是其作用域與其放置的的地方的作用域相同。
使用別名
using a1=system.threading;
2、呼叫者和呼叫棧
**執行時,方法可能呼叫其他方法,其他方法可能呼叫更多的方法。
呼叫巢狀呼叫的情況會形成呼叫棧,隨著程式複雜程式的提高,每個方法呼叫另乙個方法時
,這個呼叫棧都會變大。然後當呼叫結束時,呼叫棧會發生收縮,直到呼叫另一系列的方法。
棧展開:用來描述從呼叫棧中刪除呼叫的過程。
棧展開的順序通常與方法呼叫的順序相反。
乙個方法呼叫完畢之後,會將控制權返回給呼叫點,也就是最初發出方法呼叫的那個位置。
3、引數
值引數引數預設是傳值的。變數的棧資料會完整地複製到目標引數中。
無論傳遞的實際引數是值型別還是引用型別。
都不能修改原來的實際引數的值。(值型別不會改變原來的實際資料值,引用型別不能修改實際
引數的指向,但是可以改變指向的實際資料的值)
1class
program213
public
void changevalue(int
pvalue,program p)
1423
public
int number = 0;24
public
int count = 0
;25 }
輸出:x=0,p.count=10
引用引數
使用ref修飾
無論傳遞的實際引數是值型別還是引用型別。
都可以修改原來的實際引數的值。(值型別會改變原來的實際資料值,引用型別不僅能修改實際
引數的指向,還可以改變指向的實際資料的值)
1class
program213
public
void changevalue(ref
int pvalue,ref
program p)
1423
public
int number = 0;24
public
int count = 0
;25 }
輸出:x=10,p.count=20
輸出引數
使用out修飾
如果乙個引數被標記為out,編譯器就會核實在方法的所有正常返回**路徑中,是否
都對該引數進行了賦值。
引數陣列
它允許在呼叫乙個方法提供數量可變的引數,而不是由方法事先固定好引數的數量
1、在方法宣告的最後乙個引數之前,新增乙個params關鍵字
2、將最後乙個引數宣告為乙個陣列
引數陣列注意事項:
1、引數陣列不一事實上是方法宣告中的唯一引數。但是,引數陣列必須是方法慢用中的最後乙個引數
2、呼叫者可以為引數陣列指定0個引數,也可以指定多個引數
3、型別必須匹配於陣列指定的型別
4、呼叫者可以顯式地使用乙個陣列,而不是以逗號分隔的引數列表。
使用引數陣列,我們可以將相同型別的、數量可變的多個引數付給乙個方法。
1class
program2);
9console.writeline(fullname);
10console.readline();11}
12static
string combine(params
string
paths)
1319
return
result;20}
2122 }
4.7方法過載
方法過載是一種操作性多型(編譯時多型)
c#依據方法名、引數資料型別或者引數數量的不同來定義唯一性。
所以方法過載:方法名相同,引數資料型別或者引數數量不同。
4.8可選引數
通過在宣告方法時,將常量賦值給引數,以後呼叫方法時就不必為此引數指定值。
必須從右向左實現可選引數。
c#4.0新增了另乙個方法呼叫功能是命名引數,利用命名引數,呼叫者可顯式指定引數名,並為該引數賦值
,而不是像以前那樣只能依據引數順序來決定哪個值賦值給哪個引數。
1class
program220
static
string combine(string pfirstname, string pmiddlename = "
.", string plastname = "")21
2627 }
4.9異常處理
trythrow
catch(多個
finally
一旦引發異常或者throw乙個異常,後面的**不會執行,會跳轉到某個catch執行(可以有多個catch,有多個catch時,處理異常的型別從具體到到抽象依次順序宣告),
並且finally會永遠執行,無論引發異常與否。
引數方法和非引數方法
機器學習上的方法分為引數方法 根據先驗知識假定模型服從某種分布,然後利用訓練集估計出模型引數,也就弄清楚了整個模型,例如感知器 和非引數方法 基於記憶訓練集,然後根據訓練集 例如knn 引數方法根據先驗知識假定模型服從某種分布,然後利用訓練集估計出模型引數,也就弄清楚了整個模型。那麼,估計模型引數到...
C 方法引數
c 程式設計方法引數 形式引數與實際引數和引數傳遞機制 方法引數的本質是為了在呼叫者和方法之間實現資料交換,是方法介面的重要組成部分。呼叫者在呼叫方法時,需要注意方法引數的個數 型別 位 置以及傳遞方向等規定。形式引數 形式引數簡稱為形參,指的是方法定義時方法頭中的形式參 數,這些形式引數在方法未被...
C 方法的out引數和ref引數詳解
當乙個方法有多個返回值且是不同型別時,我們可以利用方法的引數 out引數和ref引數。我們先來看看最簡單的引數傳遞 static void main string args public static intadd int a,int b 一看就知道返回結果是10,20,30 那麼再來看看方法的re...