2008-12-15 40 views
33

Tôi biết java và thường đặt trong các phương thức getter/setter. Tôi quan tâm đến việc làm nó trong C# với mã sau đây, nhưng nó ném một ngoại lệ StackOverflow. Tôi đang làm gì sai?Tại sao Property Set ném ngoại lệ StackOverflow?

Calling Mã

c.firstName = "a"; 

Mã số tài sản

public String firstName; 
{ 
    get 
    { 
     return firstName; 
    } 
    set 
    { 
     firstName = value; 
    } 
} 

Trả lời

83

Đó là bởi vì bạn đang đệ quy gọi bất động sản - trong set bạn đang thiết lập thuộc tính một lần nữa, mà tiếp tục vô cùng tận quảng cáo cho đến khi bạn thổi đống.

Bạn cần trường hậu thuẫn riêng để giữ giá trị, ví dụ:

private string firstName; 

public string FirstName 
{ 
    get 
    { 
     return this.firstName; 
    } 
    set 
    { 
     this.firstName = value; 
    } 
} 

Hoặc, nếu bạn đang sử dụng C# 3.0, bạn có thể sử dụng thuộc tính tự động, tạo trường sao lưu ẩn cho bạn, ví dụ:

public string FirstName { get; set; } 
+0

Bạn có lỗi trong ví dụ đầu tiên của mình. Loại bỏ dấu chấm phẩy sau FirstName. Picky, tôi biết. Nevermind, tôi sẽ sửa chữa nó – Les

+0

Cố định ... chỉ 4 năm trễ ;-) –

+9

Không bao giờ là quá muộn để sửa lỗi :) –

12

Bạn đang đặt tên thuộc tính bên trong thuộc tính của mình - không phải tên trường. Điều này sẽ hoạt động tốt hơn:

private m_firstName; 

public String firstName; 
{ 
    get 
    { 
     return m_firstName; 
    } 
    set 
    { 
     m_firstName = value; 
    } 
} 
+4

Tôi đã tự sửa lỗi này ... –

+0

Thậm chí còn thú vị hơn khi bạn tìm thấy một mã trong thư viện của bên thứ ba ... –

Các vấn đề liên quan