Есть ли способ изменить порядок конструкторов, перечисленных в IntelliSense в Visual Studio?
Я определил класс с несколькими конструкторами, чтобы базовые интерфейсы были неизменными после создания объекта. Я хотел бы, чтобы один из конструкторов был конструктором по умолчанию, когда пользователь вводит следующее в Visual Studio:
var obj = new MyClass(
Dim obj As New MyClass(
В настоящее время, когда я иду для создания экземпляра объекта, конструкторы не отображаются (в Visual Studio IntelliSense) в том порядке, в котором я их объявил в своем классе. Есть ли способ разметить мои конструкторы так, чтобы их методы появлялись в определенном порядке во время создания экземпляров в Visual Studio IntelliSense?
5 ответов
В Intellisense для Visual Studio нет способа контролировать порядок. Если у вас есть несколько конструкторов (или методов), ваш единственный реальный контроль с точки зрения intellisense - это использовать EditorBrowsable
с соответствующим EditorBrowsableState. Это позволяет скрыть конструктор (или метод) в intellisense или отображать его только в "расширенном" режиме, но не позволяет изменять их порядок.
Однако в этой ситуации, если вы ориентируетесь на.NET 4, я бы рекомендовал рассмотреть возможность использования одного конструктора и использования именованных и необязательных аргументов.
Это интересный вопрос, но я не слышал о такой возможности. Одним из вариантов будет пометка других конструкторов как расширенных или скрытых.
ComponentModel.EditorBrowsable( ComponentModel.EditorBrowsableState.Advanced )
ComponentModel.EditorBrowsable( ComponentModel.EditorBrowsableState.Never )
Я почти уверен, что то, о чем ты просишь, невозможно. Лучше всего пометить ваши конструкторы XML-комментариями, которые будут использоваться для заполнения intellisense в VS. Это даст пользователю подробную информацию о том, какие конструкторы используются по умолчанию и т. Д.
От редакции: я почти уверен, что VB.NET заказывает конструкторы в порядке их присутствия в объявлении класса.
Вы должны помнить, что Intellisense - это не особенность языка, а редактор. У вас не было бы функций, специфичных для IDE, встроенных в язык, потому что другие редакторы могут использоваться для написания кода. Написание кода с целью написания кода не в порядке.
Вы всегда можете использовать модель Factory и сделать конструктор защищенным для каждого метода. Однако я предпочитаю ответ Рида Копси. Однако, если.NET 4.0 не вариант, это может быть альтернативой.
Похоже, диктовать порядок как разработчику приложений пока никак. Похоже, что IntelliSense сначала сортирует по количеству аргументов, независимо от того, является ли аргумент необязательным или нет (он учитывается в любом случае).
Если у вас есть необязательные аргументы, вы можете переработать их в перегрузки, тем самым создав новый метод/конструктор с меньшим количеством параметров, которые затем появятся раньше. Вы также можете скрыть бесполезные для разработчика приложения конструкторы, объявив их внутренними.
Используя эти методы, я смог решить свою небольшую проблему. У меня был конструктор десериализации, который появился перед более часто используемым.