2011-06-29 26 views
6

Theo dõi tới this câu hỏi, tôi tự hỏi liệu có thể đánh dấu hàm F # trong một mô-đun (có lẽ thông qua một thuộc tính) là "ẩn" khỏi Intellisense. Tóm lại, tôi có một số chức năng được đánh dấu inline nhưng được triển khai theo các chức năng khác mà tôi thực sự không muốn phơi bày. Vì vậy, trong khi các chức năng thực hiện phải được giữ công khai (vì chúng đang được inline), tôi nhớ rằng trong quá khứ tôi đã gặp các phương thức C# đã bị ẩn khỏi Visual Studio Intellisense nhưng được biên dịch tốt nếu bạn biết chúng là gì, nhưng tôi không nhớ chính xác phương pháp (s) và không chắc chắn nếu đó là một số loại ad-hoc Visual Studio điều hoặc một tính năng có thể sử dụng như DebuggerBrowsable(DebuggerBrowsableState.Never) nhận thức.Có thể đánh dấu chức năng mô-đun là "ẩn" khỏi khám phá Intellisense không?

Cập nhật: Tôi đã thử áp dụng EditorBrowsable(EditorBrowsableState.Never) nhưng dường như không hoạt động trong các dự án Visual F #.

+0

Một tùy chọn là đặt các hàm 'trợ giúp' bên trong một vùng tên hoặc một lớp có tên 'Nội bộ'. Các chức năng có sẵn để sử dụng nếu một khách hàng thực sự muốn sử dụng chúng, nhưng ít nhất bây giờ chúng được phân vùng thành một khu vực mà một khách hàng của thư viện có thể thấy chúng không được dự định sử dụng trực tiếp. –

+0

@ Bryan thực sự, đó là giải pháp hiện tại tôi đã sử dụng, cảm ơn. –

Trả lời

5

Tôi đã cố gắng thực hiện điều đó gần đây và tôi khá chắc chắn rằng F # bỏ qua thuộc tính EditorBrowsable.

Cách duy nhất để khai báo biến mất khỏi IntelliSense là sử dụng ObsoleteAttribute, nhưng điều đó cũng có nghĩa là bạn sẽ nhận được cảnh báo khi bạn thực sự sử dụng hàm. Đây là một chút may mắn, nhưng nó có thể sẽ ổn nếu bạn sử dụng chức năng duy nhất từ ​​một số tập tin thực hiện nơi bạn có thể vô hiệu hóa các cảnh báo:

Tuyên bố trong một tập tin:

module Internal = 
    [<System.ObsoleteAttribute>] 
    let foo = 10 

tập tin thực thi mà vô hiệu hóa các cảnh báo và sử dụng foo:

// Disable 'obsolete' warning 
#nowarn "44" 

// 'Internal' is empty (and is not shown in the completion list) 
Internal.foo 

Thuộc tính có thể được áp dụng cho các mô-đun, chức năng và loại, vì vậy nó khá linh hoạt.

+2

Tôi sẽ gửi một lỗi về F # không tôn trọng EditorBrowsable. – Brian

+0

Cảm ơn bạn Tomas, workaround này là tuyệt vời –

+0

FYI - F # trong VS2012 vẫn bỏ qua thuộc tính EditorBrowsable (nhưng ObsoleteAttribute vẫn là một giải pháp có thể sử dụng). –

2

Bạn có thể sử dụng [EditorBrowsable(EditorBrowsableState.Never)], nhưng điều này sẽ chỉ hoạt động đối với khách hàng của hội đồng của bạn không có cùng giải pháp (tức là nhập thư viện lớp của bạn dưới dạng hội đồng chứ không phải là dự án.) các phương pháp trong Intellisense.

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