查看完整版本: 無限迴圈..?
頁: [1]

game8412 發表於 2016-3-23 11:58 PM

無限迴圈..?

各位大大好
小弟目前在寫計算平均的程式
這是老師秀出來的部分範例程式

不過我照著打

卻發生

想請各位大大指點哪裡可能出錯...因為執行前也沒有紅線阿...
<div></div>

inunu 發表於 2016-3-24 04:33 AM

本帖最後由 inunu 於 2016-3-24 04:43 AM 編輯

假設你用了:
Student a = new Student();
a.Name = "John";
它會去呼叫 Name 的 setter 沒錯

我們把時間停在剛進入 setter 程序的當下:
set
{
    // 從這開始執行
    this.Name = value;
}
下一句是 Name = value; 是寫數值到屬性, 又會叫一次屬性的 setter
也就是這個 setter 會一直呼叫自己, 形成無限迴圈
所以最後爆堆疊出 exception

你老師的版本不會, 是因為他寫的是 name (注意大小寫) 欄位
欄位沒有 setter 可觸發...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

superhbin 發表於 2016-3-24 03:52 PM

老師寫的明明是  this.name  你卻寫成 this.Name  當然就錯掉了

this.name 是代表那個 private string name
this.Name 是你自己這 public string Name

重點就是... c# 是否分大小寫的..

samou568 發表於 2016-4-5 10:45 AM

C#變數與函數的名稱是大小寫的
只要名稱中間有一字母的大小寫不一樣
兩個變數視為不同

smallanan 發表於 2016-4-6 02:29 AM

其實我個人建議如果這種屬性類的東西,沒有要傳遞別的值,或者做運算的話

直接寫一行

public string tmpString { get;set;}

這樣就好了,比較不會有問題

然後變數請不要使用到系統預留字,會出現無法編譯or奇奇怪怪的錯誤

系統預留字可參考MSDN
https://msdn.microsoft.com/zh-tw/library/x53a06bb.aspx<br><br><br><br><br><div></div>
頁: [1]