使用ref-是否是良好的编程实践

本文关键字:编程 ref- 是否是 使用 | 更新日期: 2023-09-27 18:24:05

使用ref是否是糟糕的编程实践?我正在对我的旧代码进行一些重构,实际上它经常使用ref。我已经打开了微软所有规则集的代码分析,规则说"不要通过引用传递类型"

原因:公共类型中的公共或受保护方法具有ref参数,该参数采用基元类型、引用类型或非内置类型的值类型。

为什么它真的很糟糕?我可以在我的私有方法或内部方法中使用它们吗?在私有/内部方法中使用ref将是良好的编程实践,或者也不是?

编辑:这是一些样品,

public void DoAutoScrollReverse(Rectangle rectangle, int xPosition, int yPosition,
    ref int deltaX, ref int deltaY)
{
}
public bool GetPointCoords(Graphics g, Point pMouse, DisplayBlock2D aBlock,
    ref Point3MD pt, ref DisplayPoint2D 2dPoint, ref double gapPos)
{
}

这些函数内部发生的事情是,它们正在被初始化、设置或其他什么。

更新:我为什么使用ref?事实上我不是。我需要重构它的旧代码。我去掉了一些方法,但像第二个例子中那样的复杂函数我做不到。有一个函数返回bool(告诉操作成功与否),并具有不同对象的3个ref值。我在这里该怎么办?使其私有/内部(在私有/内部良好实践中使用ref吗?)

使用ref-是否是良好的编程实践

我认为最好不要使用ref,除非真的有必要。如果可以在其他方法中更改局部变量,则可能导致难以检测的错误。

你的例子可以很容易地重写,所以你不需要再使用ref了。

public void DoAutoScrollReverse(Rectangle rectangle, int xPosition, int yPosition,
ref int deltaX, ref int deltaY)
{
}

创建一个小类:

public class Delta
{
    int X { get; set; }
    int Y { get; set; }
}

无参考:

public Delta DoAutoScrollReverse(Rectangle rectangle, int xPosition, int yPosition)
{
    return new Delta(deltaX, deltaY);
}

现在也更清楚了,您正在返回一些东西,并且您正在返回什么