gpt4 book ai didi

c# - ICustomTypeDescriptor、TypeDescriptionProvider、TypeConverter 和 UITypeEditor

转载 作者:IT王子 更新时间:2023-10-29 04:01:26 25 4
gpt4 key购买 nike

我试图全面了解您如何使用 ICustomTypeDescriptor、TypeDescriptionProvider、TypeConverter 和 UITypeEditor 来更改 PropertyGrid 的显示方式以及与对象的交互方式。

有人可以告诉我这是否正确,或者我是否遗漏了任何主要概念或要点?我真的只是想了解为什么以及何时使用每个类。

ICustomTypeDescriptor

  • 在类中实现此接口(interface)完全覆盖类的 native 属性,并用 ICustomTypeDescriptor.GetProperties() 返回的 PropertyDescriptors 替换它们

TypeDescriptionProvider

  • 用于扩展类的现有属性
  • TypeDescriptionProvider 通过 TypeDescriptionProvider 属性附加到类
  • TypeDescriptionProvider 的 GetTypeDescriptor() 方法返回一个 ICustomTypeDescriptor 以附加到该类型的现有属性。
  • PropertyGrid 将显示通过反射找到的类的属性,以及通过 TypeDescriptionProvider 添加到类的属性

类型转换器

  • 类型之间的转换
  • 就使用 PropetyGrid 而言,该 PropetyGrid 用于在复杂类型和可在属性网格中显示/编辑的原始类型之间进行转换。
  • TypeConverter 的 GetStandard 值方法也可用于在属性网格中显示可能值的列表

UITypeEditor

  • 定义一个自定义编辑器来操作复杂类型的属性。
  • 通过属性与属性关联。

因此,ICustomTypeDescriptor 和 TypeDescription 提供程序用于添加/更改/替换对象的整个属性。 TypeConverter 和 UITypeEditor 应用于各个属性并控制如何与这些特定属性交互。

最佳答案

调整:

  • TypeDescriptionProvider

    • 仍然替换元数据(不是扩展)
    • 也可以添加为TypeDescriptor.AddProvider
    • 可以应用于每个类型和每个实例,从而可以应用于列表而无需实现 ITypedList
  • 类型转换器

    • 对于PropertyGrid,这也是用来获取元数据的机制;请注意,ExpandableObjectConverter 只是委托(delegate)给 TypeDescriptor.GetProperties,但情况并非总是如此
    • 还负责重新创建具有更改的不可变对象(immutable对象)(例如结构)
  • UITypeEditor

    • 还负责绘制PropertyGrid中的预览框

附加:

  • IExtenderProvider - 附加 属性;这可能是您对 TypeDescriptionProvider
  • 感到困惑的地方
  • ITypedList - 大致上是 ICustomTypeDescriptor 的双胞胎,但用于列表;可以通过在任何 IList 上使用 TypeDescriptionProvider 和非对象索引器来避免,即 public T this[int index] {get;}
  • IListSource - 提供数据源和数据之间的间接访问;例如,DataTable 实现了 IListSource,在请求时返回 DefaultView

关于c# - ICustomTypeDescriptor、TypeDescriptionProvider、TypeConverter 和 UITypeEditor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/749542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com