2012-12-12 26 views
8

Tôi đã tạo ra một thành phần C# Windows Runtime, và dòng sau:hằng Public trong Thư viện Component WinRT

public const bool LOG_ENABLED = false; 

là ném một lỗi:

Loại 'hằng' chứa Constants bên ngoài có thể nhìn thấy liên tục trường' .LOG_ENABLED '. Các hằng số chỉ có thể xuất hiện trên các bảng liệt kê Windows Runtime

Lỗi này có ý nghĩa gì? Và làm thế nào tôi có thể khai báo các hằng số?

+2

Làm việc đó: Làm cho nội bộ thay vì công khai, tôi nghĩ là trình sửa đổi hiển thị chính xác trong trường hợp này. – csaam

+1

Một vài lời khuyên: Trong các hằng số .NET và C# không phải là chữ hoa (vì nó không phải là điều tiền xử lý), chúng nên sử dụng TitleCase. Thứ hai, bạn nên kiểm soát việc ghi nhật ký bằng tham số cấu hình, không phải hằng số. – Dai

+2

Một chút cũ, nhưng bạn nên đăng giải pháp của mình làm câu trả lời và chấp nhận nó để mọi người có thể thấy câu hỏi này được trả lời. – BlargleMonster

Trả lời

4

Đây là một câu hỏi cũ, nhưng Ill cho hai xu của tôi không ít hơn. const và công cộng là một sự kết hợp nguy hiểm và thường bỏ lỡ sử dụng. Điều này là do thực tế rằng nếu một trường const công khai được thay đổi trong thư viện thì thư viện không thể thay thế mà tất cả các máy khách của thư viện đó cần phải được xây dựng lại vì nó sẽ sao chép giá trị thực trong máy khách chứ không phải tham chiếu với giá trị đó.

Một lựa chọn là để làm một cái gì đó như thế này nếu bạn thực sự muốn có một cộng đồng "liên tục":

public static class Constants 
{ 
    public static readonly bool LOG_ENABLED = false; 
} 

Tuy nhiên điều này cũng không thành trong các thành phần thư viện WinRT

'WindowsRuntimeComponent1.Constants' contains externally visible field 'System.Boolean WindowsRuntimeComponent1.Constants.LOG_ENABLED'. Fields can be exposed only by structures.

Một cách khác mà không thực sự công việc là

public static class Constants 
{ 
    public static bool LOG_ENABLED { get { return false; } } 
} 

Tôi không chắc chắn lý do tại sao không thể ha có một const công khai hoặc chỉ đọc trong một thư viện thành phần WinRT vì nó có thể trong một thư viện lớp bình thường.

Sau khi đọc, có vẻ như các trường công cộng bị giới hạn trong cấu trúc và cấu trúc CHỈ có thể chứa các trường công khai.

Giống như bạn đã nói trong phần nhận xét, việc thay đổi nó thành nội bộ là một lựa chọn tốt nếu bạn không sử dụng nó từ một nguồn bên ngoài.

+0

bool tĩnh công khai LOG_ENABLED {get {return false; }} không cần phải ở trong một lớp tĩnh. Nó có thể nằm trong bất kỳ lớp thư viện thành phần WinRT nào bị niêm phong. – Hong

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