Скрытие 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
, и применить к нему тот же атрибут, и это тоже проявляется, поэтому ясно, что этот атрибут не делает то, что я думал, что он это сделает.
Я заметил примечание в документации о том, что я не скрывал вещи из той же сборки, но я попытался создать новый проект, и они все еще появляются там.
Ответы
Ответ 1
Согласно thread, это по дизайну. Методы/свойства, украшенные EditorBrowsable(EditorBrowsableState.Never)
, скрыты только от intellisense, если они являются частью класса, который находится в другой ссылочной сборке. Сборка не должна быть частью одного и того же решения.
Ответ 2
Хорошо, я нашел решение, это отчасти было моей ошибкой и частично неполной документацией.
Моя ошибка заключалась в том, что я не отмечил все методы в правильном классе, но даже при исправлении этого метода все еще появились.
Выводит примечание в документации, которое гласит:
В Visual С#, EditorBrowsableAttribute не подавляет членов из класса в той же сборке.
На самом деле (акцент мой):
В Visual С#, EditorBrowsableAttribute не подавляет членов класса в том же открытом решении.
Я пометил методы в соответствующем классе, сделал полную перестройку, создал новый проект за пределами файла решения, сделал ссылки на файлы скомпилированных файлов из моего проекта IoC, и вот, методы исчезли.
Я оставлю вопрос на случай, если у кого-то другая проблема.