Можно ли пометить функцию модуля как «скрытую» из обнаружения Intellisense? - PullRequest
7 голосов
/ 30 июня 2011

В качестве ответа на этот вопрос мне интересно, можно ли пометить функцию F # в модуле (предположительно через атрибут) как «скрытую» от Intellisense. Напомним, у меня есть некоторые функции, которые помечены inline, но реализованы в терминах других функций, которые я не хочу раскрывать. Поэтому, хотя функции реализации должны быть общедоступными (поскольку они встроены), я помню, что в прошлом я сталкивался с методами C #, которые были скрыты от Visual Studio Intellisense, но компилировались просто отлично, если вы знали, что они были, но я не помню точный метод (ы) и не уверен, что это была какая-то специальная вещь Visual Studio или полезная функция, такая как DebuggerBrowsable(DebuggerBrowsableState.Never) осведомленность.

Обновление: Я пытался применить EditorBrowsable(EditorBrowsableState.Never), но он не работает в проектах Visual F #.

Ответы [ 2 ]

6 голосов
/ 30 июня 2011

Я пытался сделать это недавно, и я уверен, что F # игнорирует атрибут EditorBrowsable.

Единственный способ заставить объявление исчезнуть из IntelliSense - это использовать ObsoleteAttribute, но это также означает, что вы получите предупреждение, когда вы фактически используете функцию.Это немного прискорбно, но это может быть нормально, если вы используете функцию только из некоторого файла реализации, где вы можете отключить предупреждение:

Объявление в одном файле:

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

Файл реализациикоторый отключает предупреждения и использует foo:

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

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

Атрибут может применяться к модулям, функциям и типам, поэтому он довольно гибкий.

2 голосов
/ 30 июня 2011

Вы можете использовать [EditorBrowsable(EditorBrowsableState.Never)], но это будет работать только для клиентов вашей сборки, которые не находятся в одном решении (то есть импортируют библиотеку классов как сборку, а не как проект.) Проекты в том же решении все равно будут показать методы в Intellisense.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...