代码之家  ›  专栏  ›  技术社区  ›  JDMX

哪个函数调用control.shouldSerializeVisibility

  •  1
  • JDMX  · 技术社区  · 15 年前

    有人知道从哪里调用control.shouldserializeevisable吗?反射镜没有显示它被任何东西使用,谷歌就空了。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Hans Passant    15 年前

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

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

        2
  •  1
  •   C.Evenhuis    15 年前

    序列化使用反射访问属性,这可以解释为什么它不显示来自反射的任何用法。

    此属性告诉序列化进程可见属性已从其默认值更改,应将其序列化。

        3
  •  0
  •   Marc Gravell    15 年前

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

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

    如果该方法存在,将调用它。同样,这个 ShouldSerializeValue 抽象也是一些属性出现的原因 大胆的 在里面 PropertyGrid (注:它还包括 [DefaultValue] )

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

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