This documentation is archived and is not being maintained.
ObjRef Constructor (MarshalByRefObject, Type)
Visual Studio 2010
Initializes a new instance of the ObjRef class to reference a specified MarshalByRefObject of a specified Type.
Assembly: mscorlib (in mscorlib.dll)
Parameters
- o
- Type: System::MarshalByRefObject
The object that the new ObjRef instance will reference.
- requestedType
- Type: System::Type
The Type of the object that the new ObjRef instance will reference.
// a custom ObjRef class that outputs its status [System::Security::Permissions::SecurityPermissionAttribute( System::Security::Permissions::SecurityAction::Demand, Flags=System::Security::Permissions::SecurityPermissionFlag::SerializationFormatter)] [System::Security::Permissions::SecurityPermissionAttribute (System::Security::Permissions::SecurityAction::Demand, Flags=System::Security::Permissions::SecurityPermissionFlag::Infrastructure)] [System::Security::Permissions::SecurityPermissionAttribute (System::Security::Permissions::SecurityAction::InheritanceDemand, Flags=System::Security::Permissions::SecurityPermissionFlag::Infrastructure)] public ref class MyObjRef: public ObjRef { private: // only instantiate via marshaling or deserialization MyObjRef(){} public: MyObjRef( MarshalByRefObject^ o, Type^ t ) : ObjRef( o, t ) { Console::WriteLine( "Created MyObjRef." ); ORDump(); } MyObjRef( SerializationInfo^ i, StreamingContext c ) : ObjRef( i, c ) { Console::WriteLine( "Deserialized MyObjRef." ); } virtual void GetObjectData( SerializationInfo^ s, StreamingContext c ) override { // After calling the base method, change the type from ObjRef to MyObjRef ObjRef::GetObjectData( s, c ); s->SetType( GetType() ); Console::WriteLine( "Serialized MyObjRef." ); } virtual Object^ GetRealObject( StreamingContext context ) override { if ( IsFromThisAppDomain() || IsFromThisProcess() ) { Console::WriteLine( "Returning actual Object* referenced by MyObjRef." ); return ObjRef::GetRealObject( context ); } else { Console::WriteLine( "Returning proxy to remote Object*." ); return RemotingServices::Unmarshal( this ); } } 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 != nullptr ) { IMessageSink^ EISinks = EnvoyInfo->EnvoySinks; while ( EISinks != nullptr ) { Console::WriteLine( "\tSink: {0}", EISinks ); 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 ref class LocalObject: public MarshalByRefObject { public: // overriding CreateObjRef will allow us to return a custom ObjRef [System::Security::Permissions::SecurityPermissionAttribute (System::Security::Permissions::SecurityAction::LinkDemand, Flags=System::Security::Permissions::SecurityPermissionFlag::Infrastructure)] virtual ObjRef^ CreateObjRef( Type^ t ) override { return gcnew MyObjRef( this,t ); } };
Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Show: