C# 什么函数调用Control.ShouldSerializeVisible

C# 什么函数调用Control.ShouldSerializeVisible,c#,.net,winforms,C#,.net,Winforms,有人知道从哪里调用Control.shouldVisible吗?反射器没有显示它被任何东西使用过,而google则是空的。序列化使用反射来访问属性,这就解释了为什么它没有显示反射器的任何用法 此属性告诉序列化进程Visible属性已从其默认值更改,应该序列化 这是设计器和序列化程序实现使用的基于约定的模式。例如,在组件模型中: PropertyDescriptor prop = TypeDescriptor.GetProperties(obj)["Visible"];

有人知道从哪里调用Control.shouldVisible吗?反射器没有显示它被任何东西使用过,而google则是空的。

序列化使用反射来访问属性,这就解释了为什么它没有显示反射器的任何用法


此属性告诉序列化进程Visible属性已从其默认值更改,应该序列化

这是设计器和序列化程序实现使用的基于约定的模式。例如,在
组件模型中:

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

        }
将调用该方法(如果存在)。同样地,这个
ShouldSerializeValue
抽象也使得一些属性出现在
PropertyGrid
中(注意:它还可以查看
[DefaultValue]

PropertyDescriptor
是从绑定和设计器的角度讨论任意属性的原始方法)


同样,一些序列化程序(当然是
XmlSerializer
,但我相信也是
DataContractSerializer
和protobuf net)会尊重这种模式,询问对象是否希望序列化该属性。

私有ShouldSerializeXxx()方法是[DefaultValue]属性的替代方法。无法始终使用该属性,因为默认值可能取决于无法在DefaultValueAttribute构造函数中表示或需要复杂表达式的状态

该方法通过反射执行,通过PropertyDescriptor.ShouldSerializeValue()方法公开。此管道的重要客户端是PropertyGrid控件(使用它选择粗体字体)和Windows窗体设计时代码序列化程序(使用它抑制不必要的代码)