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