.net中的Tag属性有什么用处

Bra*_*rad 16 .net c# .net-2.0 winforms

我注意到带控件的Tag属性.是否可以使用它来引用我的自定义对象,或者我应该远离它,因为它需要装箱和拆箱,这被提到是不安全的并且不推荐.

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

class CustClass
{
    public int number {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*mwi 34

Tag物业的目的是让您将其用于任何您想要的目的.您可以安全地存储您想要的任何内容.

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

你在哪里读到拳击/拆箱是"不安全的"?这绝对不是真的.(有些人声称它效率低下,但即便如此也是如此.)此外,你的代码甚至根本不包含拳击的例子.CustClass是一种参考类型.仅在分配时将值类型装箱object.

  • 当大量使用时,取消装箱效率很低,但对于控件中的一个int,它不太可能被注意到. (5认同)

Wil*_*ler 5

我认为按照您想要的方式使用它不会成为装箱或拆箱问题。据我所知,该 Tag 属性仅供程序员使用,因此您可以按照您需要的方式使用它。

请参阅Control.TagMSDN 上的属性以获取有关如何使用此属性的更多参考。

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