Какие функции вызывают Control.ShouldSerializeVisible - PullRequest
1 голос
/ 20 апреля 2010

Кто-нибудь знает, откуда вызывается Control.ShouldSerializeVisible? Отражатель не показывает, что он используется кем-то, и Google вышел пустым.

Ответы [ 3 ]

2 голосов
/ 20 апреля 2010

Закрытые методы ShouldSerializeXxx () являются альтернативой для атрибута [DefaultValue]. Этот атрибут не всегда может использоваться, поскольку значение по умолчанию может зависеть от состояния, которое не может быть выражено в конструкторе DefaultValueAttribute или требует сложного выражения.

Метод выполняется через Reflection, он предоставляется через метод PropertyDescriptor.ShouldSerializeValue (). Важными клиентами этой системы являются элемент управления PropertyGrid (использует его для выбора жирного шрифта) и сериализатор кода времени разработки Windows Forms (использует его для подавления ненужного кода).

1 голос
/ 20 апреля 2010

Сериализация использует отражение для доступа к свойствам, что объясняет, почему она не используется в Reflector.

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

0 голосов
/ 20 апреля 2010

Это шаблон на основе соглашения, используемый реализациями конструктора и сериализатора. Например, на ComponentModel:

        PropertyDescriptor prop = TypeDescriptor.GetProperties(obj)["Visible"];
        if (prop.ShouldSerializeValue(obj))
        {   // write it...

        }

вызовет этот метод, если он существует. Точно так же, эта ShouldSerializeValue абстракция - это то, что заставляет некоторые свойства отображаться жирным шрифтом в PropertyGrid (примечание: оно также выглядит как [DefaultValue]).

(PropertyDescriptor - оригинальный способ говорить о произвольных свойствах с точки зрения связывания и конструкторов)

Точно так же некоторые сериализаторы (конечно, XmlSerializer, но также DataContractSerializer, я полагаю - и protobuf-net) будут соблюдать этот шаблон, спрашивая объект, хочет ли он, чтобы это свойство было сериализовано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...