.NET Remoting が WCF に置き換えられたことは知っていますが、これは何よりも学術的な問題です。
次のように定義されたリモート可能クラスがあるとします。
public class MyObject : MarshalByRefObject
{
}
また、タイプ MyObject のリモート可能オブジェクトをインスタンス化するが、それをリモート可能オブジェクトとして使用しないクライアント コードがあるとします。
public static void Main(String[] args)
{
MyObject mo = new MyObject();
}
ここで、mo の型をプログラムで伝えたいとします。私の知る限り、それを行うには2つの方法があります。
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 の型を知りたい場合は、上記で使用した 2 つの方法のいずれかを使用して、同じ結果を得ることができます。ただし、ブレークポイントを配置して F5 キーを押すと、Visual Studio は mo の型が実際には MyObject {System.Runtime.Remoting.Proxies.__TransparentProxy} であることを教えてくれます。
私が知りたいのは、mo の基になる型が __TransparentProxy であることをプログラムで伝える方法です。