📄 ex-19-01
字号:
// Example 19-01: Marshaling across app domain boundaries
using System;
using System.Runtime.Remoting;
using System.Reflection;
namespace ProgCSharp
{
// for marshal by reference comment out
// the attribute and uncomment the base class
[Serializable]
public class Point // : MarshalByRefObject
{
public Point (int x, int y)
{
Console.WriteLine( "[{0}] {1}",
System.AppDomain.CurrentDomain.FriendlyName,
"Point constructor");
this.x = x;
this.y = y;
}
public int X
{
get
{
Console.WriteLine( "[{0}] {1}",
System.AppDomain.CurrentDomain.FriendlyName,
"Point x.get");
return this.x;
}
set
{
Console.WriteLine( "[{0}] {1}",
System.AppDomain.CurrentDomain.FriendlyName,
"Point x.set");
this.x = value;
}
}
public int Y
{
get
{
Console.WriteLine( "[{0}] {1}",
System.AppDomain.CurrentDomain.FriendlyName,
"Point y.get");
return this.y;
}
set
{
Console.WriteLine( "[{0}] {1}",
System.AppDomain.CurrentDomain.FriendlyName,
"Point y.set");
this.y = value;
}
}
private int x;
private int y;
}
// the shape class marshals by reference
public class Shape : MarshalByRefObject
{
public Shape(int upperLeftX, int upperLeftY)
{
Console.WriteLine( "[{0}] {1}",
System.AppDomain.CurrentDomain.FriendlyName,
"Shape constructor");
upperLeft = new Point(upperLeftX, upperLeftY);
}
public Point GetUpperLeft()
{
return upperLeft;
}
public void ShowUpperLeft()
{
Console.WriteLine( "[{0}] Upper left: {1},{2}",
System.AppDomain.CurrentDomain.FriendlyName,
upperLeft.X, upperLeft.Y);
}
private Point upperLeft;
}
public class Tester
{
public static void Main()
{
Console.WriteLine( "[{0}] {1}",
System.AppDomain.CurrentDomain.FriendlyName,
"Entered Main");
// create the new app domain
AppDomain ad2 =
System.AppDomain.CreateDomain(
"Shape Domain");
// Assembly a = Assembly.LoadFrom("ProgCSharp.exe");
// Object theShape = a.CreateInstance("Shape");
// instantiate a Shape object
ObjectHandle oh = ad2.CreateInstance(
"ProgCSharp",
"ProgCSharp.Shape", false,
System.Reflection.BindingFlags.CreateInstance,
null, new object[] {3, 5},
null, null, null );
Shape s1 = (Shape) oh.Unwrap();
s1.ShowUpperLeft(); // ask the object to display
// get a local copy? proxy?
Point localPoint = s1.GetUpperLeft();
// assign new values
localPoint.X = 500;
localPoint.Y = 600;
// display the value of the local Point object
Console.WriteLine( "[{0}] localPoint: {1}, {2}",
System.AppDomain.CurrentDomain.FriendlyName,
localPoint.X, localPoint.Y);
s1.ShowUpperLeft(); // show the value once more
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -