访问内部类的继承类型

时间:2018-12-09 18:54:11

标签: c# vb.net msmq

试图扩展BeginReceive方法,并使MessageQueue.ReceiveCompleted的事件处理程序通过REFERENCE传递一个TCPClient对象。照原样,我可以将其作为对象传递,但是它将通过VALUE传递,因此将是TCPClient对象的副本。不好!<​​/ p>

因此,我决定尝试编写自己的重载方法,等等。调试到.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#代码)。有什么快速的方法可以访问这些东西?

1 个答案:

答案 0 :(得分:2)

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