ObjRef.TypeInfo プロパティ
ObjRef が記述するオブジェクトの IRemotingTypeInfo を取得または設定します。
Public Overridable Property TypeInfo As IRemotingTypeInfo
[C#]
public virtual IRemotingTypeInfo TypeInfo {get; set;}
[C++]
public: __property virtual IRemotingTypeInfo* get_TypeInfo();public: __property virtual void set_TypeInfo(IRemotingTypeInfo*);
[JScript]
public function get TypeInfo() : IRemotingTypeInfo;public function set TypeInfo(IRemotingTypeInfo);
プロパティ値
ObjRef が記述するオブジェクトの IRemotingTypeInfo 。
解説
TypeInfo は、現在の ObjRef が表しているリモート オブジェクトの型に関する詳細情報を格納します。現在のプロパティは、その型が実装するインターフェイスの一覧と、型の階層構造を格納しています。この情報は、プロキシをインクリメント方式で詳細に指定して、クライアントに対するリモート オブジェクト型の表示を調整するために使用できます。
使用例
// a custom ObjRef class that outputs its status
public class MyObjRef : ObjRef {
// only instantiate via marshaling or deserialization
private MyObjRef() { }
public MyObjRef(MarshalByRefObject o, Type t) : base(o, t) {
Console.WriteLine("Created MyObjRef.");
ORDump();
}
public MyObjRef(SerializationInfo i, StreamingContext c) : base(i, c) {
Console.WriteLine("Deserialized MyObjRef.");
}
public override void GetObjectData(SerializationInfo s, StreamingContext c) {
// After calling the base method, change the type from ObjRef to MyObjRef
base.GetObjectData(s, c);
s.SetType(GetType());
Console.WriteLine("Serialized MyObjRef.");
}
public override Object GetRealObject(StreamingContext context) {
if ( IsFromThisAppDomain() || IsFromThisProcess() ) {
Console.WriteLine("Returning actual object referenced by MyObjRef.");
return base.GetRealObject(context);
}
else {
Console.WriteLine("Returning proxy to remote object.");
return RemotingServices.Unmarshal(this);
}
}
public void ORDump() {
Console.WriteLine(" --- Reporting MyObjRef Info --- ");
Console.WriteLine("Reference to {0}.", TypeInfo.TypeName);
Console.WriteLine("URI is {0}.", URI);
Console.WriteLine("\nWriting EnvoyInfo: ");
if ( EnvoyInfo != null) {
IMessageSink EISinks = EnvoyInfo.EnvoySinks;
while (EISinks != null) {
Console.WriteLine("\tSink: " + EISinks.ToString());
EISinks = EISinks.NextSink;
}
}
else
Console.WriteLine("\t {no sinks}");
Console.WriteLine("\nWriting ChannelInfo: ");
for (int i = 0; i < ChannelInfo.ChannelData.Length; i++)
Console.WriteLine ("\tChannel: {0}", ChannelInfo.ChannelData[i]);
Console.WriteLine(" ----------------------------- ");
}
}
// a class that uses MyObjRef
public class LocalObject : MarshalByRefObject {
// overriding CreateObjRef will allow us to return a custom ObjRef
public override ObjRef CreateObjRef(Type t) {
return new MyObjRef(this, t);
}
}
[C++]
// a custom ObjRef class that outputs its status
public __gc class MyObjRef : public ObjRef
{
// only instantiate via marshaling or deserialization
private:
MyObjRef() { }
public:
MyObjRef(MarshalByRefObject* o, Type* t) : ObjRef(o, t)
{
Console::WriteLine(S"Created MyObjRef.");
ORDump();
}
public:
MyObjRef(SerializationInfo* i, StreamingContext c) : ObjRef(i, c)
{
Console::WriteLine(S"Deserialized MyObjRef.");
}
public:
void GetObjectData(SerializationInfo* s, StreamingContext c)
{
// After calling the base method, change the type from ObjRef to MyObjRef
ObjRef::GetObjectData(s, c);
s->SetType(GetType());
Console::WriteLine(S"Serialized MyObjRef.");
}
public:
Object* GetRealObject(StreamingContext context)
{
if (IsFromThisAppDomain() || IsFromThisProcess())
{
Console::WriteLine(S"Returning actual Object* referenced by MyObjRef.");
return ObjRef::GetRealObject(context);
}
else
{
Console::WriteLine(S"Returning proxy to remote Object*.");
return RemotingServices::Unmarshal(this);
}
}
public:
void ORDump()
{
Console::WriteLine(S" --- Reporting MyObjRef Info --- ");
Console::WriteLine(S"Reference to {0}.", TypeInfo->TypeName);
Console::WriteLine(S"URI is {0}.", URI);
Console::WriteLine(S"\nWriting EnvoyInfo: ");
if (EnvoyInfo != 0)
{
IMessageSink* EISinks = EnvoyInfo->EnvoySinks;
while (EISinks != 0)
{
Console::WriteLine(S"\tSink: {0}", EISinks);
EISinks = EISinks->NextSink;
}
}
else
Console::WriteLine(S"\t {no sinks}");
Console::WriteLine(S"\nWriting ChannelInfo: ");
for (int i = 0; i < ChannelInfo->ChannelData->Length; i++)
Console::WriteLine (S"\tChannel: {0}", ChannelInfo->ChannelData->Item[i]);
Console::WriteLine(S" ----------------------------- ");
}
};
// a class that uses MyObjRef
public __gc class LocalObject : public MarshalByRefObject
{
// overriding CreateObjRef will allow us to return a custom ObjRef
public:
ObjRef* CreateObjRef(Type* t)
{
return new MyObjRef(this, t);
}
};
[Visual Basic, JScript] Visual Basic および JScript のサンプルはありません。C# および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ