可怕的無窮遞迴

2021-06-06 23:30:01 字數 787 閱讀 8192

今天在看到一段**,閒著沒事就敲了下來執行一下,

static void main(string args)

static void a(int a)

}不知道**來的想法將if(a<5)改為了if(true),完事之後編譯--執行了一下,是的,出現了下面的情況,丟擲了process is terminated due to stackoverflowexception.

這使我突然想起了前幾天在《visual c#2010 從入門到精通》上看到的一段話,這裡摘抄下來,以示警告,也順帶用正規的語言解釋一下上面的問題。

"雖然大家習以為常的一種做法是為屬性和private欄位賦予幾乎完全相同的名稱,兩個名稱只是首字母的大小寫有別,但應該關注這樣做的乙個缺陷。請看以下**,它實現了乙個名為employee(員工)的類。employeeid欄位是乙個private欄位,但employeeid屬性提供了對這個欄位的public訪問:

class employee

set

}上述**能成功通過編譯(這是不可能的,呵呵),但一旦訪問employeeid屬性,程式就會丟擲乙個stackoverflowexception異常。這是由於get accessor和set accessor引用的是屬性(大寫的e)而不是private欄位(小寫的e),所以會造成乙個無窮遞迴,最終造成程序耗盡所有可用的記憶體。這種因為乙個字母的大小寫而引發的bug是很難發現的!」

測試的同志們一定要多加注意啊!

可怕的階乘

計算階乘n 是一件可怕的事情,因為當n並不是很大時,n 將是乙個很大的值。例如13 6227020800,已經超過了我們常用的unsigned int型別的取值範圍。請設計乙個程式,使其可以計算100以內的數的階乘,結果用字串的形式輸出 詳細描述 介面說明 原型 void calcnn int n,...

可怕的階乘

計算階乘n 是一件可怕的事情,因為當n並不是很大時,n 將是乙個很大的值。例如13 6227020800,已經超過了我們常用的unsigned int型別的取值範圍。請設計乙個程式,使其可以計算100以內的數的階乘,結果用字串的形式輸出 詳細描述 介面說明 原型 void calcnn int n,...

可怕的需求

講乙個段子!另乙個團隊的主管跑來對我說 jeff,喔需要你修改這幾個功能。好的,沒有問題。我的回答很爽快,能告訴我這些修改都是解決哪些使用者的哪些問題嘛?她反問 這就是需求啊?我說 需求我已經收到了,能跟我講一講這些功能現在是哪些使用者在使用?使用者是怎麼使用這些功能完成自己的工作的?她看著我,就像...