fork download
  1. // ===++===
  2. //
  3. // OrtizOL
  4. //
  5. // ===--===
  6. /*============================================================
  7. //
  8. // Clase: UsoObjectHandle.cs
  9. //
  10. // Propósito: Demostrar el uso de la clase ObjectHandle del
  11. // namespace System.Runtime.Remoting.
  12. //
  13. ============================================================*/
  14.  
  15. using System;
  16. using System.Reflection;
  17. using System.Runtime.Remoting;
  18.  
  19. namespace Recetas.Cap03
  20. {
  21. ///<summary>
  22. /// Clase pasada por referencia (hereda de MarshalByRefObject).
  23. ///</summary>
  24. internal class NuevaClase : MarshalByRefObject
  25. {
  26. public NuevaClase()
  27. {
  28. Console.Write("Creación de instancia de `NuevaClase` en el AppDomain: {0}\n", AppDomain.CurrentDomain.GetHashCode());
  29. }
  30.  
  31. public int ObtenerHashCodeDominioActual()
  32. {
  33. return AppDomain.CurrentDomain.GetHashCode();
  34. }
  35. }
  36.  
  37. ///<summary>
  38. /// Clase de uso de ObjectHandle
  39. ///</summary>
  40. internal class UsoObjectHandle
  41. {
  42. public static void Main()
  43. {
  44. // Visualización del hashcode del dominio de aplicación actual:
  45. Console.WriteLine("\nHashcode del dominio actual: \n\t{0}\n", AppDomain.CurrentDomain.GetHashCode());
  46.  
  47. // Creamción de un dominio de aplicación extra:
  48. AppDomain nuevoAppDomain = AppDomain.CreateDomain("NuevoDominio");
  49.  
  50. // Creacion de una instancia de `NuevaClase` en el
  51. // AppDomain recién creado:
  52. ObjectHandle manejadorObjeto = nuevoAppDomain.CreateInstance(typeof(NuevaClase).Assembly.FullName.ToString(), "Recetas.Cap03.NuevaClase");
  53.  
  54. // 'Desempaqueta' el objeto cargado en el nuevo dominio `nuevoAppDomain`:
  55. NuevaClase pruebaNuevaClase = (NuevaClase)manejadorObjeto.Unwrap();
  56.  
  57. if(RemotingServices.IsTransparentProxy(pruebaNuevaClase))
  58. {
  59. Console.WriteLine("\nEl objeto recuperado con `manejadorObjeto.Unwrap` es un proxy (intermediario).");
  60. }
  61. else
  62. {
  63. Console.WriteLine("\nEl objeto recuperado con `manejadorObjeto.Unwrap` no es un proxy (intermediario).");
  64. }
  65.  
  66. Console.WriteLine();
  67.  
  68. Console.WriteLine("Invocación al método `pruebaNuevaClase.ObtenerHashCodeDominioActual` en el nuevo dominio: \n\t{0}",
  69. pruebaNuevaClase.ObtenerHashCodeDominioActual());
  70.  
  71. Console.WriteLine();
  72. }
  73. }
  74. }
Success #stdin #stdout 0.41s 39696KB
stdin
Standard input is empty
stdout
Hashcode del dominio actual: 
	-900862720

Creación de instancia de `NuevaClase` en el AppDomain: -75037952

El objeto recuperado con `manejadorObjeto.Unwrap` es un proxy (intermediario).

Invocación al método `pruebaNuevaClase.ObtenerHashCodeDominioActual` en el nuevo dominio: 
	-75037952