Często jest to dobry wybór podczas tworzenia niestandardowe elementy sterujące i chcesz zapobiec wyświetlaniu niektórych właściwości w projektancie. Czasami właściwości nie są zastępowalne, ale projektant nie dba o to, dba tylko o to, czy własność publiczna na najniższym poziomie ma atrybut [Browsable]
.
Załóżmy na przykład, że kontrola nie obsługuje dopełnienia. Właściwość Control.Padding nie jest możliwa do zastąpienia. Ale wiesz też, że nic złego nie stanie się, jeśli ktoś ustawi dopełnienie, po prostu właściwość nie będzie zawierała niczego, więc nie chcesz, aby Twoi użytkownicy widzieli to w projektancie i myślę, że to faktycznie działa. Więc ją ukryć:
public class MyControl : Control
{
[Browsable(false)]
public new Padding Padding
{
get { return base.Padding; }
set { base.Padding = value; }
}
}
w tym przypadku jesteśmy dosłownie za pomocą elementu ukrywa się ukryć element - od projektanta.
Odkładając na bok, zdaję sobie sprawę, że istnieją inne sposoby osiągnięcia tego celu - jest to tylko jedna z możliwych opcji.
Współzmienność typu powrotnego jest wyraźnie powszechnym przypadkiem użycia. W rzeczywistości spotkałem się z tą sytuacją więcej niż raz i uważałem, że nie da się tego zrobić. Teraz wiem lepiej.Ukrywanie własności w kontrolkach to niezła sztuczka. Przykład GST Erica Lipperta ma sens logiczny, ale odbiega tak daleko od typowych idiomów OOP, że byłbym bardzo ostrożny w jego używaniu. – ScottS