我知道.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。
答案 0 :(得分:3)
bool isProxy = System.Runtime.Remoting.RemotingServices.IsTransparentProxy(obj);