只有在動手寫代碼的時候,才能真正理解到代碼的邏輯思想,所以,開始寫代碼吧。
函數的意義:降低相同功能的代碼重復編寫,提高重復代碼的維護效率。
一個文件由命令空間(namespace)、類(class)、函數(function)的結構組成。函數放在Class類中,使用static void HelloFunction() { }語句,函數命名一般開頭字母用大寫,調用函數時必須是函數名+括號:HelloFunction();。
void表示函數無返回值,如需返回值,則將void替換為返回的值類型,使用return結束函數并返回值給調用代碼。另外,return可存在于void聲明的函數中,例如:return;(用來退出函數,不能有值)。
參數指定:int i, string myStr,還可以使用params指定參數數組,必須放在參數列表的最后位置。參數傳遞分值傳遞和引用傳遞,引用傳遞(聲明、調用參數時添加ref關鍵字),函數對參數的修改會修改傳入變量本身的值,例如:
static void DoubleInt(ref int refInt) { refInt *= 2; Console.WriteLine("ref 函數內的值:{0}", refInt); } static void Main(string[] args) { //ref 引用傳遞,由于將修改參數值,引用的參數有兩個條件:1)不能是常量 2)必須初始化; int refVal = 10; Console.WriteLine("ref 前變量的值:{0}", refVal); DoubleInt(ref refVal); Console.WriteLine("ref 參數值結果:{0}", refVal); }
不同函數中聲明的變量不能在其它函數中直接訪問,需使用參數的方式。另外,可在類中聲明變量,一樣使用static的方式,如與函數內的變量重名,需使用PRogram(類名).myStr訪問,如直接使用myStr會屏蔽全局變量。
還需要注意的是語句塊也會影響變量的作用域,例如for(int i = 1),這個i只能在for循環中(嵌套其中的語句)使用,跳出循環后,變量i就不能使用了。
對全局變量的使用,書上持保留意見,建議在函數間使用參數傳遞的方式,這樣可以比較直觀地看出變量的變化。
執行C#程序等同于執行main()函數,main()函數執行完畢,程序執行過程就結束了。main函數可以返回int(替換void)值,表示程序如何退出,后面看看怎么用的。另外,最有意思的就是參數string[] args,用來做DOS程序很直觀:
static void Main(string[] args) { Console.WriteLine("參數長度:{0}", args.Length); foreach (string myArg in args) { Console.WriteLine("*) {0}", myArg); } }
可通過配置項目屬性:調試 - 啟動選項 - 命令行參數,給args賦值,參數以空格隔開,如字符串有空格,則用引號包圍起來??梢栽囋囋贒OS下使用,像DOS命令一樣增加參數。
可以在結構中聲明函數,聲明時不使用static,而不是public,應該是可訪問性方面的需要(書中提到后面會詳述):
struct customerName { public string firstName, lastName; public string cusName() { return firstName + lastName; } }
使用時就可以這樣:customerName.firstName = "水手"、customerName.cusName(),有點面向對象的意思了,呵呵。
以前學習的時候,可能在知道命令行程序“原來是這樣做出來的”,然后就沒心情學下去了,然后就自以為是地去折騰命令行程序,結果又做不出個所以然來,慢慢地就失去了學習的興趣,結果就:半途而廢。
SO,現在要淡定~~~雖然知道了怎么做,但是要想做出一個真正能用的工具,不是學點新知識就能行的,做出真正可以用的工具是一個過程,一個不斷迭代的過程。
新聞熱點
疑難解答