2010-09-29 60 views
13

我注意到了带控件的Tag属性。可以使用它来引用我的自定义对象,还是应该远离它,因为它需要装箱和拆箱,这已被认为是不安全的并且不被推荐。.net中的Tag属性有什么用处.net

TreeNode tn = new TreeNode(); 
CustClass o = new CustClass() 
o.number = 123; 
tn.Tag = o; 

class CustClass 
{ 
    public int number {get; set;} 
} 
+1

一个良好的开端:[标签上的参考MSDN(http://msdn.microsoft.com/en-us/library/system.windows.forms.treenode.tag.aspx) – NullUserException 2010-09-29 16:26:30

+0

为什么你标记该论坛的语言?完全无关。 – TomTom 2010-09-29 16:27:10

+4

@TomTom - 因为他提供的代码是用C#编写的?另外,到底什么是“网络winforms”?还原... – 2010-09-29 16:28:52

回答

30

Tag属性的目的是让您将它用于任何您想要的目的。你可以安全地存储你想要的东西。

习惯上声明专门用于存储在Tag属性中的类(例如,您使用CustClass)。但是如果你只需要一个值,那么直接存储一个int就没有什么问题。

你从哪里看过拳击/拆箱是“不安全”?这绝对是不正确的。 (有些人声称它是效率低下,但即便如此也是如此。)此外,你的代码甚至不包含拳击的例子。 CustClass是一个参考类型。分配给object时,只有值类型被装箱。

+4

拆箱在大量使用时效率不高,但对于控件中的一个int,它不太可能被注意。 – 2010-09-29 17:10:28

2

我不认为这将是一个拳击或拆箱问题,以你想要的方式使用它。据我所知,Tag属性只是为了程序员的目的,所以你可以按照你需要的方式使用它。

请参阅MSDN上的Control.Tag属性以获取有关如何使用此属性的进一步参考。

例如,我曾经使用它在Windows窗体应用程序中向用户输入指令。当控件GotFocus事件触发时,指令Label.Text属性被分配了包含指令字符串的我的控件Tag属性的值。

0

从链接也被别人这里提到:

https://msdn.microsoft.com/en-us/library/system.windows.forms.control.tag.aspx 一曰:

从Object类派生的任何类型都可以分配给该 财产。如果通过Windows Forms 设计器设置了Tag属性,则只能分配文本。

Tag属性的常见用法是存储与控件关联的数据,其密度接近 。例如,如果您有一个控制 显示有关客户的信息,则可以将 中包含客户订单历史记录的DataSet存储在该控件的标签属性 中,以便可以快速访问数据。

,并在https://msdn.microsoft.com/en-us/library/system.windows.forms.treenode.tag.aspx一曰:

...例子创建了一个根树节点分配子树节点。 A ArrayList中每个Customer对象的子树节点被添加到 根树节点以及分配给Customer对象的每个Order对象 的子树节点。客户对象被分配到 Tag属性,并且代表客户对象的树节点是 以橙色文本显示。此示例要求您定义了一个 Customer和Order对象,一个Form上的TreeView控件,以及一个名为customerArray的ArrayList,其中包含Customer对象。