在VB.NET中
Dim dgv as new datagridview
contextstrip.tag = dgv
充当指针还是副本?
由于.SourceControl存在问题,我正在使用它将控制DGV传递给Context Menus dropdownitems。这有多低效?
答案 0 :(得分:2)
它用作指针,而不是副本。你可以告诉我的方式是对象的类型。在其他语言(如C)中,您可以以任一方式引用任何对象,因为它由您定义变量的方式决定。但是,在.NET中,它由对象本身的类型决定。 .NET的设计者决定,为了简单起见,如果你想引用某些东西作为指针,你可能总是希望将它作为指针引用,反之亦然。
Reference Types(类)是始终在堆上创建并由指针引用的对象。值类型(结构)总是在堆栈上创建,变量直接包含数据,而不是指向数据的指针。由于DataGridView
被声明为Class
,因此它是引用类型。因此,设置为DataGridView
对象的任何变量都将包含指针,而不是副本。如果你真的需要复制,你需要研究克隆或序列化。
另外,值类型对象也可以通过名为Boxing的进程放在堆上。由于Tag
属性声明为Object
,如果要将其设置为值类型对象,则首先将对象加框。