Бывают случаи, когда вы можете получить что-то похожее на это.
Например, в Windows Forms все свойства элемента управления отображаются в таблице свойств, поэтому вы можете редактировать их значения в визуальном конструкторе. Базовый класс Control предоставляет набор общих свойств, таких как Text, которые не применяются ко всем элементам управления, но которые (по мнению команды Windows Forms) являются достаточно общими, чтобы их можно было установить для элемента управления без необходимость знать, кнопка ли это, метка, окно и т. д.
Хотя вы не можете на самом деле удалить эти свойства в классе-потомке - код все еще может читать и записывать их, если вы действительно хотите - вы можете пометить их атрибутами, чтобы сообщить инструментам, чтобы они их скрывали, чтобы, по крайней мере, они тебе не мешают.
// Don't show this property in the Property Grid
[Browsable(false)]
// Don't save this property's design-time value to be reloaded at runtime
// (i.e. don't generate a property assignment in the .designer.cs file)
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
// Don't show this property in the editor's Intellisense code-completion lists
[EditorBrowsable(EditorBrowsableState.Never)]
public override string Text {
get { return base.Text; }
set { base.Text = value; }
}
Конечно, можно утверждать, что только из-за плохого дизайна им вообще пришлось создавать эти атрибуты - этот проект явно нарушает Принцип замены Лискова . (Вместо этого они могли бы создать интерфейс для каждого из этих общих свойств, который позволил бы потомкам участвовать в их поддержке, в то же время предоставляя коду доступ к ним без снижения до определенных типов элементов управления.)