Как скрыть публичные методы от intellisense - PullRequest
47 голосов
/ 01 февраля 2012

Я хочу скрыть публичные методы из списка членов intellisense.Я создал атрибут, который при применении к методу будет вызывать метод при создании объекта.Я сделал это, чтобы лучше поддерживать частичные классы.Проблема заключается в том, что в некоторых средах (например, Silverlight) отражение не может получить доступ к закрытым членам, даже членам дочерних классов.Это проблема, так как вся работа выполняется в базовом классе.Я должен сделать эти методы общедоступными, но я хочу, чтобы они были скрыты от intellisense, подобно тому, как работает атрибут Obsolete.Честно говоря, потому что я занимаюсь инкапсуляцией объектов.Я пробовал разные вещи, но на самом деле ничего не получалось.Этот метод по-прежнему отображается в раскрывающемся списке элементов.

Как мне не отображать публичные методы в intellisense, когда я не хочу, чтобы их вызывали клиенты? Как этона реальный вопрос, филистимляне!Это также может относиться к свойствам MEF, которые должны быть общедоступными, хотя иногда вы хотите скрыть их от клиентов.

Обновление: Я достиг зрелости как разработчик с тех пор, как опубликовал этот вопрос.Почему я так сильно заботился о сокрытии интерфейса, вне меня.

Ответы [ 3 ]

109 голосов
/ 01 февраля 2012

Использование атрибута EditorBrowsable, например, так, приведет к тому, что метод не будет отображаться в intellisense:

[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
public void MyMethod()
{
}
15 голосов
/ 01 февраля 2012

Вы ищете EditorBrowsableAttribute

В следующем примере показано, как скрыть свойство класса от IntelliSense, установив соответствующее значение для Атрибут EditorBrowsableAttribute. Сборка Class1 в его собственной сборке.

В Visual Studio создайте новое решение Windows Application и добавьте ссылка на сборку, которая содержит Class1. В форме1 конструктор, объявите экземпляр Class1, введите имя экземпляр и нажмите клавишу периода, чтобы активировать IntelliSense раскрывающийся список членов Class1. Свойство Age не отображается в раскрывающийся список.

using System;
using System.ComponentModel;

namespace EditorBrowsableDemo
{
    public class Class1
    {
        public Class1()
        {
            //
            // TODO: Add constructor logic here
            //
        }

        int ageval;

        [EditorBrowsable(EditorBrowsableState.Never)]
        public int Age
        {
            get { return ageval; }
            set
            {
                if (!ageval.Equals(value))
                {
                    ageval = value;
                }
            }
        }
    }
}
0 голосов
/ 01 февраля 2012

Чтобы расширить мой комментарий о частичных методах. Попробуйте что-то вроде этого

Foo.part1.cs

partial class Foo
{
    public Foo()
    {
        Initialize();
    }

    partial void Initialize();
}

Foo.part2.cs

partial class Foo
{
    partial void Initialize()
    {
         InitializePart1();
         InitializePart2();
         InitializePart3();
    }

    private void InitializePart1()
    {
        //logic goes here
    }

    private void InitializePart2()
    {
        //logic goes here
    }

    private void InitializePart3()
    {
        //logic goes here
    }
}
...