Это шаблон на основе соглашения, используемый реализациями конструктора и сериализатора. Например, на ComponentModel
:
PropertyDescriptor prop = TypeDescriptor.GetProperties(obj)["Visible"];
if (prop.ShouldSerializeValue(obj))
{ // write it...
}
вызовет этот метод, если он существует. Точно так же, эта ShouldSerializeValue
абстракция - это то, что заставляет некоторые свойства отображаться жирным шрифтом в PropertyGrid
(примечание: оно также выглядит как [DefaultValue]
).
(PropertyDescriptor
- оригинальный способ говорить о произвольных свойствах с точки зрения связывания и конструкторов)
Точно так же некоторые сериализаторы (конечно, XmlSerializer
, но также DataContractSerializer
, я полагаю - и protobuf-net) будут соблюдать этот шаблон, спрашивая объект, хочет ли он, чтобы это свойство было сериализовано.