2012-04-04 26 views
7

Tại sao lại như vậy? Đây là mã của tôi:Ngoại lệ không được loại trừ của loại 'System.StackOverflowException' xảy ra

public class KPage 
{ 
    public KPage() 
    { 
     this.Titolo = "example"; 
    } 

    public string Titolo 
    { 
     get { return Titolo; } 
     set { Titolo = value; } 
    } 
} 

Tôi đặt dữ liệu theo hàm tạo. Vì vậy, tôi muốn làm điều gì đó như

KPage page = new KPage(); 
Response.Write(page.Titolo); 

nhưng tôi nhận được lỗi trên:

set { Titolo = value; } 
+1

thể trùng lặp của [quá tải Getter và Setter Nguyên nhân StackOverflow trong C#] (http://stackoverflow.com/questions/1437791/overloading-getter-and-setter-causes -stackoverflow-in-c-sharp) hoặc http://stackoverflow.com/questions/5676430/stackoverflowexception-was-unhandled – user7116

+7

Titolo getter sử dụng thuộc tính Titolo. Có người sử dụng tài sản Titolo. Có người sử dụng tài sản Titolo. Có người sử dụng tài sản Titolo. Có người sử dụng tài sản Titolo. Có người sử dụng tài sản Titolo. Có người sử dụng tài sản Titolo ... Kaboom. –

Trả lời

36

Bạn có một vòng lặp vô hạn ở đây:

public string Titolo 
{ 
    get { return Titolo; } 
    set { Titolo = value; } 
} 

Thời điểm bạn tham khảo Titolo trong mã của bạn, getter hoặc setter gọi getter mà gọi getter mà gọi getter mà gọi getter mà gọi getter ... Bam - StackOverflowException.

Hoặc sử dụng một lĩnh vực sao lưu hoặc sử dụng auto implemented properties:

public string Titolo 
{ 
    get; 
    set; 
} 

Hoặc:

private string titolo; 
public string Titolo 
{ 
    get { return titolo; } 
    set { titolo = value; } 
} 
2

Thay đổi để

public class KPage 
{ 
    public KPage() 
    { 
     this.Titolo = "example"; 
    } 

    public string Titolo 
    { 
     get; 
     set; 
    } 
} 
3

Bạn có một setter tự tham chiếu. Bạn có thể có nghĩa là để sử dụng tính năng tự động tính:

public string Titolo 
{ 
    get; 
    set; 
} 
Các vấn đề liên quan