1

.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 であることをプログラムで伝える方法です。

4

1 に答える 1

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