【问题标题】:Best way to associate or group properties within a class?在类中关联或分组属性的最佳方式?
【发布时间】:2015-03-08 05:06:43
【问题描述】:

我是创建对象的新手,所以我对这里的属性有疑问。我正在创建一个具有几组属性的公共类,例如下面的 sn-p:

Public Class Template

    'General properties
Property ID As Integer
Property Name As String
Property Description As String
Property SupportedBrand As String

End class

有没有一种方法可以将属性相互“关联”?假设这组属性是“通用”的,这些值用于“音频”而这些用于“视频”?我最初的反应是创建一个作为枚举的自定义结构或列表的属性,但这似乎不正确。有什么建议?

我知道说 Template.General.ID 也不正确,因为那是一个单独的模块。我的目标是稍后能够循环说“对于这个模板对象的 generalProperties 中的每个 x 属性”。

【问题讨论】:

  • 这些实际上不是属性,而是字段。你想以什么方式组?这些可能在控件上吗?
  • 我猜你是对的,字段更正确。我正在使用所述字段创建一个自定义对象,并且我希望能够将它们组合在一起以保持清洁和仅循环字段的特定部分的能力。
  • 没有组,但有许多对象,例如包含内部集合(项目、列、行)的许多控件,但这是通过嵌套类完成的。有一个 MP3 Tag 阅读器,可以将相关的道具组放在集合中,并且很难找出特定的属性。
  • 啊,好吧。所以我认为不建议对属性进行分组?
  • 如果应用程序需要,它会这样做,但myFoo.General.FileSize 只是嘈杂。曾经的案例可能类似于 MediaInfo.DLL,它会产生媒体属性。音频和视频都存在编解码器和格式等,因此“分组”是有意义的。但由于您只是在阅读 prop vals,所以 myMedia.Audio("RunningTime")(或类似的)是有道理的。这不是您要问的完全

标签: vb.net object properties


【解决方案1】:

您可以将此属性添加到您的属性中:

<Category("General")>

如果按类别分组,所有具有相同类别名称的属性将在属性窗口中分组在一起。您可以使用反射来获取属性的属性。有关如何执行此操作的示例,请参见此处:

How to filter or find properties based on attributes

【讨论】:

  • 虽然不会创建物理属性组:myObj.General.FileSize 不是神奇地创建的
猜你喜欢
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
  • 2019-11-05
  • 1970-01-01
  • 2014-01-09
相关资源
最近更新 更多