Подтвердить что ты не робот

Как скрыть общественные методы от intellisense

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

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

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

4b9b3361

Ответ 1

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

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
    }
}

Ответ 2

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

[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
public void MyMethod()
{
}

Ответ 3

Вы ищете EditorBrowsableAttribute

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

В Visual Studio создайте новое решение для Windows и добавьте ссылка на сборку, которая содержит Class1. В Form1 конструктор, объявите экземпляр класса 1, введите имя экземпляр и нажмите клавишу периода, чтобы активировать 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;
                }
            }
        }
    }
}