C 學習筆記(三) 方法

2021-09-11 20:25:46 字數 4654 閱讀 6837

方法:由方法頭和方法體兩部分構成,方法頭包括返回型別、方法名、引數列表;方法體是乙個由花括號括起來的語句塊。

方法體可以包含本地變數、控制流結構、方法呼叫和內嵌的塊。

本地變數:儲存本地或者臨時的計算資料,而字段儲存與物件狀態有關的資料。本地變數的存在性與生存期僅限於建立它的塊以及內嵌的塊,它從宣告開始存在,到塊執行結束後消失。

型別推斷關鍵字var:用於從初始化語句的右邊推斷出變數或例項的型別,只能用於本地變數,不能用於字段;只能在宣告中包含初始化時使用;一旦變數的型別推斷出來就不可更變;如var varials1 = 15;var varials2 = new myclass();塊的巢狀:本地變數在巢狀的塊中定義時,生存期也只在所宣告的那個巢狀塊中。

本地常量:宣告時必須初始化,必須帶有關鍵字const,一旦宣告,其值不可改變。const int varl = 16;控制流:一些控制語句,包括選擇語句如if…else、switch語句;迭代迴圈語句

如for()、while、do…while、foreach()語句;跳轉語句如break、continue、goto、return語句。

方法呼叫:格式為 例項名.方法名(引數列表),保證方法是可訪問的,否則就是類名.方法名(引數列表),其實在筆記(二)裡面,寫到訪問類的(方法)成員時,就已經說明是方法呼叫了。

引數:形參和實參。形參是本地變數,宣告時必須有型別和名稱,且在方法執行之前被賦值,由實參傳遞,並確保型別匹配。

值引數:用於資料傳遞,將實參的值賦值給形參,在方法呼叫時,先在棧中為形參分配空間,然後將實參的值賦給形參。

引用引數:在方法的宣告和呼叫時都要有修飾符ref,實參必須是變數,且在用作實參前必須被賦值引用型別變數可以賦值為乙個引用或null。用法如下:

using system;

using system.collections.generic;

using system.linq;

using system.threading.tasks;

using system.text;

namespace test1

class program

,f2:",f1.val,f2);

}static void main(string args)

:",206.5623);

myclass a1 = new myclass();

int a2 = 10; //變數在使用之前必須被賦值

mymethod(ref a1,ref a2); //實參必須是變數

console.writeline("f1.val:,f2:",a1.val,a2); }}

}

引用型別作為值引數和引用引數:作為值引數傳遞時,如果在方法內建立乙個新物件並賦值給形參,將切斷型參與實參之間的關聯,方法呼叫結束後,新物件不復存在;作為引用引數傳遞,如果在方法內建立乙個新物件並賦值給形參,在方法呼叫結束後該物件依然存在,並且實參為所引用的值,此時形參就好像是實參的別名,同時指向相同的記憶體空間。用法如下:

using system;

using system.collections.generic;

using system.linq;

using system.threading.tasks;

using system.text;

namespace test2

class program

",f1.val);

f1 = new myclass();

console.writeline("after new object creation:",f1.val); //實參與形參同時指向初始值

}//引用型別物件作為引用引數傳遞

static void myrefasparameter2(ref myclass f2)

",f2.val);

f2 = new myclass();

console.writeline("after new object creation:",f2.val);

}static void main(string args)

",a1.val);

myrefasparameter1(a1);

console.writeline("after method call:",a1.val); //方法呼叫結束後,方法內的新物件消失,實參指向方法內被賦給的值

console.writeline("----------------------------------------");

myclass a2 = new myclass();

console.writeline("引用型別作為引用引數傳遞");

console.writeline("before method call:",a2.val);

myrefasparameter2(ref a2);

console.writeline("after method call:",a2.val); //方法呼叫結束之後,實參和形參同時指向初始值}}

}

結果如下:

輸出引數: 在方法的宣告和呼叫時都要有修飾符out,實參必須是變數,輸出引數的形參也是實參的別名,同時指向相同的記憶體空間,對形參的任何操作在方法呼叫之後對實參變數都是可見的;不同於引用引數,在方法內部,輸出引數在能夠被讀取之前必須被賦值,也就沒有必要在方法呼叫之前為實參賦值;在方法返回之前,在方法內部要為所有的輸出引數賦值。用法如下:

//輸出引數的基本使用:修飾符out,在方法內部對輸出引數賦值

using system;

using system.collections.generic;

using system.linq;

using system.threading.tasks;

using system.text;

namespace test4

class program

static void main(string args)

,a2:",a1.val,a2);}}

}

引數陣列: 乙個引數列表只能有乙個引數陣列;如果有引數陣列,必須位於列表的最後;引數列表中的所有引數具有相同的資料型別;宣告引數陣列:資料型別前加修飾符params,資料型別後加中括號,如宣告乙個整型引數陣列:public void mymethod(params int vals);使用數字下標索引訪問陣列;注意:引數陣列的修飾符params只在宣告時使用,方法呼叫時沒有修飾符

為引數陣列傳遞實參:兩種方式如下,

mymethod(10,20,30);   //方法一,直接賦值,逗號隔開

int inits = ; //方法二,先初始化引數陣列,再傳遞給該方法。

mymethod(inits);

int other = new int ; //建立並初始化乙個陣列 ,逗號間隔

命名引數:位置引數與位置有關,實參與形參要匹配;命名引數不講究順序,引數的宣告與位置引數一樣,只是在方法呼叫時,要用到形參名,在形參名後加冒號和實際的引數值或者表示式,如:

public class myclass

",a+b+c+d); }}

//呼叫

myclass a = new myclass();

a.mythod(c:2,b:6,a:8,d:10); //形參名:實參值

方法過載:指的是類中的多個方法具有相同的名稱,但必須保證簽名各不相同;方法的簽名位於方法頭,包括:方法名稱,引數數目,引數型別,引數修飾符,但不包括返回型別和形參名。

long  mythod(int a,int b) 

long mythod(inta,int b,int c)

double mythod(double a,double b)

棧幀:區域性變數和引數儲存在棧上,方法呼叫時,記憶體從棧頂開始分配,儲存和方法相關聯的資料項,包括返回位址、引數所分配的記憶體以及其他與方法呼叫相關聯的資料項。方法呼叫時,整個棧幀被壓入棧,呼叫結束後,整個又被彈出棧。

遞迴:方法呼叫自身。

class program

",val);

} static void main()

}

學習筆記 ABC三方協議

sceondview作為上個檢視,push到下乙個檢視firstview,在push的同時把下乙個檢視 firstview中viewdidload中的資料 傳到 上乙個檢視 secondview mydelegate.h import protocol mydelegate 協議名稱 void pa...

visual C (三)方法和作用域

參考書 visual c 從入門到精通 第一部分 visual c 和visual studio 2015概述 第3章 方法和作用域 3.2 使用作用域 3.3 編寫方法 3.4 使用可選引數和具體引數 c 的方法也就是函式的意思。通常建立乙個方法需要有 返回型別 方法名 引數列表 方法主體語句。如...

Objective C( 三 方法的宣告與實現)

oc方法的宣告與實現 oc方法的宣告在 inte ce中 大括號外 end上面 oc方法的實現在 implementation 中 end上面 oc方法中,乙個引數對應乙個冒號 方法名 例 fangfaming 冒號也是方法名的一部分 返回值型別 方法名 引數名 引數型別 引數 引數名 引數型別 引...