C 基礎 一(方法詳解)

2022-03-31 10:34:46 字數 2648 閱讀 6257

需要知道:類和方法的關係

方法和引數修飾符

自定義方法可以有或沒有引數,也可以有或沒有返回值。可以被各種關鍵字(static、virtual、public、new等)修飾以限制其行為。

c#引數修飾符

無                                       如果乙個引數沒有用引數修飾符標記,則認為它將按值傳遞,這意味著被呼叫的方法收到原始資料的乙份副本。

out                                     輸出引數由

被呼叫的方法賦值

,因此它按引用傳遞。如果被呼叫的方法沒有給輸出引數賦值,就會出現編譯器錯誤。

ref                                    呼叫者賦初值,並且可以由被呼叫的方法可以選地重新賦值。如果被呼叫的方法未能給ref引數賦值,也不會編譯器錯誤。

params                                 這個引數修飾符允許將一組可變數量的引數作為單獨的邏輯引數進行傳遞。方法只能有乙個params修飾符,而且必須是方法的最後乙個引數。

預設的引數傳遞行為

引用型別:

不管這裡傳遞的是值型別還是引用型別,傳遞之前和之後的值是不會變的。add()方法裡面操作的是資料的副本,不會影響到資料本身。就像在方法裡面申明了乙個引數來接受傳遞的引數,在方法裡面操作的是新申明的引數如不是我們傳遞進去的引數。

in關鍵字通過引用傳遞引數。 它類似於 ref

或 out

關鍵字,不同之處在於in引數無法通過呼叫的方法進行修改。 而ref引數是可以修改的,out引數必須由呼叫方方法修改,且這些修改可以在呼叫上下文中看到。

public

void samplemethod(in

int i) //

7.2語法 中才能使用in,代表自讀屬性,方法中是不能修改的

public

void samplemethod(int i)

out修飾符

out修飾符叫做輸出引數。定義為帶有輸出引數(通過關鍵字out)的方法有義務在退出這個方法之前,給引數賦乙個恰當的值。呼叫乙個帶有輸出引數的方法也需要使用out修飾符。

規則:①宣告乙個變數不賦值(賦值編譯不會錯)

②把此變數以out形式傳到方法裡面

③呼叫方法後此變數就有值

ref修飾符

如果希望方法可以對在呼叫者作用域中宣告的不同資料進行操作(通常改變它的值),例如:排序和交換例程,就需要使用引用引數。

輸出引數不需要在它們被傳遞給方法之前初始化,因為方法在退出之前必修為輸出引數賦值。

引用引數必須在它們被傳遞給方法之前初始化,因為是在傳遞乙個對已存在變數的引用。

ref例子:

規則:①宣告乙個變數(初始化)

②把引數以ref形式傳遞

③方法裡做操作

params修飾符

c#使用params關鍵字支援引數陣列的使用。params關鍵字可以把可變數量的引數(相同型別)  作為單個邏輯引數傳給方法。

注: 為了避免歧義(多重定義),c#要求方法只支援乙個params引數,而且必須是引數列表中的最後乙個引數。

定義可選引數

可選引數就是宣告引數的時候已經賦值了,相同與有個初始值,呼叫者可以根據需求需不需要改變這個值。

注:可選引數的值是確定的而不是由編譯的時候產生的。可選引數必須放在方法簽名的最後。

使用命名引數呼叫方法

命名引數允許你在呼叫方法時以任何順序指定引數的值。因此,你可以使用冒號操作符通過名稱來指定 引數。

命名引數配合可選引數使用比較有效果。

方法過載

定義了一組名字相同的方法時,它們的引數數量(或型別)不同,這樣的方法就叫做被過載。

例如:計算兩個數的和,這就相同於乙個過載

linux密碼破解一方法

鬱悶,剛裝的系統,好像任是把密碼輸錯兩遍了,所以進不去了,好在baidu一下,好多破解方法,這裡也記錄一下,以後就不怕再輸錯或者忘了 1.在出現grub畫面時,用上下鍵選中你平時啟動linux的那一項,然後按e鍵 2.再次用上下鍵選中你平時啟動linux的那一項 類似於kernel boot vml...

pdf檔案多合一方法

主要借助linux系統中的已有工具pdfunite進行多份pdf檔案合成 linux系統中自帶pdf處理工具,一般可以很簡單使用如下命令將兩份pdf合成乙份pdf檔案。bash pdfunite 1.pdf 2.pdf 1 2.pdf 就是上面這條命令這麼簡單。如果遇到成千上萬份pdf檔案,合成乙份...

Delphi彙編級研究 一 方法呼叫

考慮如下這個簡單類ttest unit unit1 inte ce uses windows,sysutils,variants,classes type ttest class public j integer i integer function aa b,c integer integer s...