输入参数对象事例代码如下:
[Serializable]
public class NumbericalValue//: MarshalByRefObject
{
private int decimalDigits;
/// <summary>
/// 小数点位数(精度)
/// </summary>
public int DecimalDigits
{
get { return decimalDigits; }
set { decimalDigits = value; }
}
public NumbericalValue(int decimalDigits)
{
this.decimalDigits = decimalDigits;
}
}
客户端代码事例如下:
// NumbericalValue类已经加了Serializable标记,表明此类支持序列化
double result = calculator.Division(firstNumber, secondNumber, new NumbericalValue(3));
若是以值类型参数输入时,由于值类型本身就支持可序列化,所以无需再作任何处理。
当Remote Object处理完后,有时需要返回参数。返回参数可以以按值返回,也可以按引用返回。若是按值返回,需给类注明[Serializable];若是按引用返回,必须继承MarshalByRefObject,返回的对象也是一个远程对象,也必须接受.NET Remoting对远程对象的管理。管理方式会自动继承被调用的远程对象。
远程对象事例代码如下:
public class Calculator : MarshalByRefObject
{
public NumbericalValue GetPI()
{
double pi = Math.PI;
NumbericalValue numbericalValue = new NumbericalValue(8);
numbericalValue.IntegralValue = (int)pi;
numbericalValue.DecimalValue = int.Parse(pi.ToString().Substring(pi.ToString().IndexOf(".")+1,int.MaxValue.ToString().Length-1));
numbericalValue.Structure();
return numbericalValue;
}
}
//返回对象类
[Serializable]
public class NumbericalValue//: MarshalByRefObject
{
//整数值
private int integralValue;
//小数点位数(精度)
private int decimalDigits;
//小数值
private int decimalValue;
/// <summary>
/// 整数值
/// </summary>
public int IntegralValue
{
get { return integralValue;}
set { integralValue = value;}
}
/// <summary>
/// 小数点位数(精度)
/// </summary>
public int DecimalDigits
{
get { return decimalDigits; }
set { decimalDigits = value; }
}
/// <summary>
/// 小数值
/// </summary>
public int DecimalValue
{
get { return decimalValue;}
set { decimalValue = value;}
}
public NumbericalValue(int decimalDigits)
{
this.decimalDigits = decimalDigits;
}
/// <summary>
/// 按照小数位数构建小数值
/// </summary>
public void Structure()
{
if (decimalValue.ToString().Length < decimalDigits.ToString().Length)
decimalValue = int.Parse(decimalValue.ToString().Substring(0, decimalDigits));
}
}
}
客户端代码事例如下:
processResultTextBox.Text += "开始获取远程对象方法返回值" + Environment.NewLine;
NumbericalValue pi = calculator.GetPI();
processResultTextBox.Text += "完成获取远程对象方法返回值。" + Environment.NewLine;
processResultTextBox.Text += "返回值为:" + pi.IntegralValue.ToString() +"."+ pi.DecimalValue.ToString() + Environment.NewLine;
processResultTextBox.Text += "返回值对象类型是否远程对象代理:" + RemotingServices.IsTransparentProxy(pi).ToString() + Environment.NewLine;
两种返回参数运行效果图