访问继承类型的内部类



希望扩展BeginReceive方法和MessageQueue.ReceiveCompleted的事件处理程序,以便通过REFERENCE传递TCPClient对象。照原样,我可以将其作为对象传入,但它将按VALUE传递,因此将是TCPClient对象的副本。不行!

因此,我决定尝试编写自己的重载方法等。调试到.NET 4.5.2 Framework代码中,我看到BeginReceive(TimeSpan timeout, object stateObject)返回:

ReceiveAsync(timeout, CursorHandle.NullHandle, NativeMethods.QUEUE_ACTION_RECEIVE, null,
stateObject);

问题是CursorHandleNativeMethods似乎在System.Messaging.Interop命名空间中,但由于所有这些类都被声明为"内部",我似乎无法访问它们。(是-我下载了.NET Framework C#代码(。有什么快速访问这些东西的方法吗?

TCPClient是一个类,因此是一个引用类型。此类型的参数和变量包含对对象的引用。在这种情况下,ByVal表示此引用是通过值传递的,而不是通过对象传递的。

TCPClient对象将不会被复制!


请注意,您也可以传递引用ByRef。在这种情况下,您处理的是对对象的引用。这意味着,如果将新对象分配给方法中的此类参数,则会更改用作方法参数的变量。如果参数为ByVal,则不会更改此变量,因为方法参数将包含引用的副本(而不是对象的副本(。

在这两种情况下,如果在方法中更改对象的属性,它将更改原始对象,因为它是相同的对象。

Call Method(ByVal variable)
+---------+
|         |
variable +----------> | Object  |
|         |
+---+-----+
^
Sub Method (ByVal p)      |
p  +------------------+        'If you change p here, it does NOT change variable.
End Sub
Call Method(ByRef variable)
+---------+
|         |
+-----> variable +----------> | Object  |
|                             |         |
|                             +---------+
|
|       Sub Method (ByRef p)
+---------+ p                              'If you change p here, it DOES change variable.
End Sub

最新更新