我知道 .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。