2010-08-03 20 views
5

Gần đây tôi đã bắt đầu học C#. Tôi vừa học về các đặc tính và quyết định tạo một chương trình đơn giản để hiểu chúng hơn. đây là mã tôi đã viết:C# lỗi mơ hồ khi các thuộc tính được sử dụng

class Dog 
{ 
    private int weight; 
    private string colour; 
    public string colour { get; set; } 
    public Dog(int theWeight, string theColour) 
    { 
     weight = theWeight; 
     colour = theColour; 
    } 
} 

Và tôi gặp lỗi mơ hồ. Theo tôi hiểu, điều này không nên xảy ra.

+0

Điều gì sẽ xảy ra khi bạn sử dụng chữ hoa 'C' cho thuộc tính Màu? –

Trả lời

11

Bạn có một trường và thuộc tính có cùng tên colour. Đó là lý do tại sao trình biên dịch tạo ra lỗi.

5

Bạn không thể có cả trường và thuộc tính có cùng tên.

Bạn cần đổi tên một trong hai số nhận dạng colour.

6

lỗi mơ hồ là bạn đã đặt tên trường và thuộc tính cùng tên là "màu". thay đổi định nghĩa thuộc tính f.e.

public string Colour 
{ 
get { return colour;} 
set { colour = value;} 
} 
4

Trong dòng

colour = theColour; 

trình biên dịch không thể nói những gì bạn muốn nói. Nó có thể là một trong hai

private string colour; 

hoặc nó có thể là

public string colour { get; set } 

Để disambiguate lựa chọn một quy ước đặt tên khác nhau giúp. Ví dụ, bạn có thể chọn các thuộc tính có một chữ in hoa và các trường bắt đầu bằng dấu gạch dưới và một chữ thường. Trong trường hợp đó, lớp học của bạn sẽ trông như sau:

Lưu ý, mặc dù bạn có thể có một bản sao ở đây. Rất có thể là bạn không có ý định có cả thuộc tính tự động Color và trường _colour ngay từ đầu.

Bạn cũng có thể chọn công cụ để giúp bạn thực hiện theo các nguyên tắc được đề xuất. Ví dụ: xem FxCop. Không có đúng hay sai nhưng chắc chắn sẽ dễ dàng hơn khi làm việc với các quy tắc thường được chấp nhận. (Phải thừa nhận rằng đề xuất của tôi để sử dụng dấu gạch dưới cho các trường không phù hợp với những gì được chấp nhận chung. Tuy nhiên, tôi không sử dụng các trường công khai.)

+0

bằng cách này sẽ kết thúc với 2 thuộc tính/biến màu khác nhau. Có lẽ người dùng chỉ muốn một (xóa _colour) – RvdK

+0

Có. Đó là lý do tại sao tôi đã đề cập trong câu trả lời của tôi: "Lưu ý, mặc dù, bạn có thể có một bản sao ở đây anyways. Có thể là nó không phải là ý định của bạn để có cả tài sản tự động Màu sắc và lĩnh vực _colour ở nơi đầu tiên." – Manfred

1

Lưu ý rằng trong ví dụ của bạn, nếu bạn đang sử dụng C# 3.0 trở lên, bạn không thực sự cần những lĩnh vực tư nhân và có thể sử dụng tính năng tự động thực hiện:

Thông tin chi tiết về nó ở đây ... http://msdn.microsoft.com/en-us/library/bb384054.aspx

nó sẽ tránh được những vấn đề rắc rối, bởi một trong hai các lập trình viên và trình biên dịch, và cải thiện khả năng đọc.

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