移动实例方法重构
此重构允许您将实例(非静态)方法移动到另一个类型。 与 移动静态成员不同,实例方法不能随意移动到任何类型。 潜在目标类型的列表包括方法参数的类型和当前类型中字段的类型。 如果方法使用了其他类成员,重构将把源类作为参数传递。 如果需要,它还会更改非公共成员的访问权限,并将字段封装为公共属性。 方法的所有用法都会自动更新。
如果您发现某个方法的逻辑更适合放在另一个作为方法参数或字段的类型中,此重构可能会很有帮助。
在下面的示例中,我们对 LogDrawing 实例方法应用重构,将其移动到 Logger 类中。 在方法中使用的私有 pivot 字段会自动封装为相应的属性:
class Shape
{
private Point pivot;
private void LogDrawing(Logger logger)
{
var msg = $"Shape is drawn at {pivot.X}, {pivot.Y}";
logger.Log(msg);
}
}
class Logger
{
public void Log(string msg)
{
// log the message
}
}
class Shape
{
private Point pivot;
public Point Pivot
{
set { pivot = value; }
get { return pivot; }
}
}
class Logger
{
public void Log(string msg)
{
// log the message
}
private void LogDrawing(Shape shape)
{
var msg = $"Shape is drawn at" {shape.Pivot.X}, {shape.Pivot.Y}";
this.Log(msg);
}
}
将实例方法移动到另一个类型

2026年 3月 25日