2017-10-23 41 views
7

Tôi vừa gặp lỗi trên trong khi tôi đang cố gắng biên dịch một lớp proxy được tạo thông qua svcutil. Dưới đây là một phiên bản ngắn của vấn đề:CS0102 t Loại 'A' đã chứa định nghĩa cho 'set_color'

class A 
{ 
    private string colorField; 
    private string set_colorField; 

    public string color 
    { 
     get 
     { 
      return this.colorField; 
     } 
     set 
     { 
      this.colorField = value; 
     } 
    } 

    public string set_color 
    { 
     get 
     { 
      return this.set_colorField; 
     } 
     set 
     { 
      this.set_colorField = value; 
     } 
    } 
} 

này biên dịch tốt:

public string Color 
{ 
    get;set; 
} 

public string Set_Color 
{ 
    get;set; 
} 

Nhưng điều này ném những lỗi tương tự:

public string color 
{ 
    get;set; 
} 

public string set_color 
{ 
    get;set; 
} 

tôi không nhớ từng đọc về hạn chế này . Ai đó có thể chỉ cho tôi phần có liên quan của C# compiler spec?

+0

@Kirk Tôi hiểu điều đó, nhưng đâu là phần liên quan trong thông số trình biên dịch C# đề cập đến hạn chế này? Tôi không thể tìm thấy nó:/ – Icarus

Trả lời

9

https://github.com/dotnet/csharplang/blob/master/spec/classes.md#properties

Member names reserved for properties

For a property P (Properties) of type T, the following signatures are reserved:

T get_P(); 
void set_P(T value); 

Trong trường hợp bạn có color tài sản, set_color(...) được dành riêng và đó là lý do tại sao bạn không thể có set_color bất động sản cũng vậy, kể từ khi nó cố gắng để biên dịch để cùng một chữ ký.

Trong trường hợp bạn có tài sản Color, set_Color(...) được dành riêng cho nó và đó là lý do tại sao Set_Color (lưu ý thư Capital) hoạt động.

+0

Cảm ơn! Tôi sẽ chấp nhận câu trả lời này ngay khi có thể - phải chờ 10 phút. Tôi không thể tìm thấy nó trong tất cả các tìm kiếm trên Google của mình. – Icarus

+0

Đây là lý do tại sao bạn nên bắt đầu Thuộc tính với Chữ cái viết hoa. – Nikolaus

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