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

Скрытие GetHashCode/Equals/ToString из плавных классов интерфейса intellisense в Visual Studio для С#?

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

Например, я могу это сделать:

builder.Register<IFoo>().From.ConcreteType<Foo>();

Однако на каждом шаге после точки всплывает intellisense, показывающая четыре стандартных метода из класса Object, GetHashCode, Equals, GetType и ToString.

Я попытался переопределить эти методы в нескольких классах, добавив к каждому атрибут EditorBrowsableAttribute, но они все еще отображаются. Разве нет возможности скрывать их?

Обратите внимание, что я не пытаюсь скрыть их от самого класса, только от intellisense.

В принципе, мне бы хотелось:

                         +---------------+
builder.Register<IFoo>().|As             |
                         |By             |
                         |Equals         | <-- remove this
                         |From           |
                         |GetHashCode    | <-- and this
                         |GetType        | <-- as well as this
                         |ToString       | <-- and finally this
                         +---------------+

Вот что я пробовал в классе, который возвращается из Register<T>:

[EditorBrowsable(EditorBrowsableState.Never)]
public override Boolean Equals(Object obj)
{
    return base.Equals(obj);
}

[EditorBrowsable(EditorBrowsableState.Never)]
public override Int32 GetHashCode()
{
    return base.GetHashCode();
}

[EditorBrowsable(EditorBrowsableState.Never)]
public override String ToString()
{
    return base.ToString();
}

Это явно не сработало. Есть ли что-нибудь еще, что я могу попробовать?

Я также попытался добавить новый метод, а не переопределить из Object, и применить к нему тот же атрибут, и это тоже проявляется, поэтому ясно, что этот атрибут не делает то, что я думал, что он это сделает.

Я заметил примечание в документации о том, что я не скрывал вещи из той же сборки, но я попытался создать новый проект, и они все еще появляются там.

4b9b3361

Ответ 1

Согласно thread, это по дизайну. Методы/свойства, украшенные EditorBrowsable(EditorBrowsableState.Never), скрыты только от intellisense, если они являются частью класса, который находится в другой ссылочной сборке. Сборка не должна быть частью одного и того же решения.

Ответ 2

Хорошо, я нашел решение, это отчасти было моей ошибкой и частично неполной документацией.

Моя ошибка заключалась в том, что я не отмечил все методы в правильном классе, но даже при исправлении этого метода все еще появились.

Выводит примечание в документации, которое гласит:

В Visual С#, EditorBrowsableAttribute не подавляет членов из класса в той же сборке.

На самом деле (акцент мой):

В Visual С#, EditorBrowsableAttribute не подавляет членов класса в том же открытом решении.

Я пометил методы в соответствующем классе, сделал полную перестройку, создал новый проект за пределами файла решения, сделал ссылки на файлы скомпилированных файлов из моего проекта IoC, и вот, методы исчезли.

Я оставлю вопрос на случай, если у кого-то другая проблема.