懒得打字了,摘一段总结,但是我也是这么用和想的。
“
ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员更改参数的值,并保持该更改。若要通过引用传递参数, 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。它们的区别是:
1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。
2、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。
3、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。
”
还是自己写一下吧。
1、out在写方法时只出不进,但在方法体内必须赋值,调用方法时参数不需要赋值。
2、ref有出有进,在方法体内可以不赋值,直接使用,但是调用方法时必须先赋值(主要是给内存腾出一块空间出来)
上代码:NX获取面的法相及中心点
/// <summary>
/// 获取面的法相和中心点位置
/// </summary>
/// <param name="face">任意面</param>
/// <param name="point3">面中心点</param>
/// <returns></returns>
private NXOpen.Vector3d GetFaceNorm(NXOpen.Face face, out NXOpen.Point3d point3)
{
double[] faceUV = new double[4];
theUfSession.Modl.AskFaceUvMinmax(face.Tag, faceUV);
double[] parm = new double[2] { (faceUV[0] + faceUV[1]) / 2, (faceUV[2] + faceUV[3]) / 2 };
double[] point = new double[3];
double[] u1 = new double[3];
double[] v1 = new double[3];
double[] u2 = new double[3];
double[] v2 = new double[3];
double[] unit_norm = new double[3];
double[] radii = new double[2];
theUfSession.Modl.AskFaceProps(face.Tag, parm, point, u1, v1, u2, v2, unit_norm, radii);
point3.X = point[0];
point3.Y = point[1];
point3.Z = point[2];
return new Vector3d(unit_norm[0], unit_norm[1], unit_norm[2]);
}