1

我知道 .NET Remoting 已被 WCF 取代,但这更像是一个学术问题。

假设您有一个定义如下的远程类:

public class MyObject : MarshalByRefObject
{
}

并假设您有实例化 MyObject 类型的远程对象但不将其用作远程对象的客户端代码:

public static void Main(String[] args)
{
   MyObject mo = new MyObject();
}

现在,假设我想以编程方式告诉 mo 的类型。据我所知,有两种方法可以做到:

Console.WriteLine(mo.GetType().ToString());//MyObject

或者

Console.WriteLine(GetType(mo).ToString()); //MyObject

其中 GetType() 定义如下:

static Type GetType<T>(T t)
{
   return typeof(T);
}

在任何一种情况下,mo 的编译时类型和运行时类型都是 MyObject。

但现在假设我有一个实际使用 MyObject 实例作为远程对象的客户端代码:

public static void Main(String[] args)
{
   System.Runtime.Remoting.RemotingConfiguration.Configure("Client.exe.config");
   MyObject mo = new MyObject();
}

如果我想知道 mo 的类型,我可以使用上面使用的两种方法中的任何一种,并获得相同的结果。但是,当我放置断点并按 F5 时,Visual Studio 告诉我 mo 的类型实际上是 MyObject {System.Runtime.Remoting.Proxies.__TransparentProxy}

我想知道的是如何以编程方式告诉 mo 的底层类型是 __TransparentProxy。

4

1 回答 1

3
bool isProxy = System.Runtime.Remoting.RemotingServices.IsTransparentProxy(obj);
于 2012-09-27T13:55:59.317 回答