Как скрыть общественные методы от intellisense
Я хочу скрыть общедоступные методы из списка членов intellisense. Я создал атрибут, который при применении к методу вызовет вызов метода при его создании. Я сделал это, чтобы лучше поддерживать частичные классы. Проблема в том, что в некоторых средах (например, Silverlight) отражение не может получить доступ к частным членам, даже к дочерним классам. Это проблема, поскольку вся работа выполняется в базовом классе. Я должен сделать эти методы общедоступными, но я хочу, чтобы они были скрыты от intellisense, подобно тому, как работает атрибут Obsolete
. Честно говоря, потому что я анал об инкапсуляции объектов. Я пробовал разные вещи, но на самом деле ничего не получилось. Метод все еще отображается в раскрывающемся списке участников.
Как заставить общедоступные методы отображаться в intellisense, когда я не хочу, чтобы их вызывали клиенты? Как это для реального вопроса, Philistines! Это также может относиться к свойствам MEF, которые должны быть общедоступными, хотя иногда вы хотите скрыть их от клиентов.
Update:
Я созрел как разработчик, так как я разместил этот вопрос. Почему я так сильно заботился о том, чтобы скрывать интерфейс, вне меня.
Ответы
Ответ 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;
}
}
}
}
}