我在vb.net中发现了一个小问题,但我无法解决。我有一个带有树形视图的窗体,以下是相关内容:
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
treeTest.Nodes.Add("a")
treeTest.Nodes(0).Test()
End Sub
Test 是一个扩展方法:
Imports System.Runtime.CompilerServices
Public Module ExtModule
<Extension()>
Public Sub Test(ByRef node As TreeNode)
End Sub
End Module
如果我使用ByRef,则我的treeview看起来像这样: 而使用ByVal则会得到: 这似乎完全相反,如果我只是发送一个引用,为什么节点会出现两次,而如果我复制它,它只会出现一次?
ByRef
的实际含义... - Jon SkeetByVal
并没有发送“对象的副本”。您需要了解任何引用类型表达式的值已经只是一个引用,而不是一个对象。请参见http://pobox.com/~skeet/csharp/parameters.html,了解C#视角下的事物,这应该有所帮助——基本上,在C#中,`ref`大致相当于`ByRef`,默认情况相当于`ByVal`。 - Jon Skeet