将方法转换为非静态重构
此重构允许您将静态方法转换为原始类型或其他类型的实例方法。 新实例方法的目标类型可以从传递给方法的参数类型中选择。 方法的所有用法、实现和重写都会自动更新。
此重构仅适用于至少有一个当前解决方案中定义的类型参数的静态方法。
在下面的示例中,我们使用此重构将 信息 类的静态方法 合并 转换为相同类型的实例方法:
class Info
{
string Id { get; set; }
string Name { get; set; }
static Info Merge(Info i1, Info i2)
{
return new Info
{
Id = i1.Id + i2.Id,
Name = i1.Name + i2.Name
};
}
void Test()
{
var i1 = new Info()
{ Id = "123", Name = "AA" };
var i2 = new Info()
{ Id = "456", Name = "BB" };
var merged =
Info.Merge(i1, i2);
}
}
class Info
{
string Id { get; set; }
string Name { get; set; }
Info Merge(Info i2)
{
return new Info
{
Id = Id + i2.Id,
Name = Name + i2.Name
};
}
void Test()
{
var i1 = new Info()
{ Id = "123", Name = "AA" };
var i2 = new Info()
{ Id = "456", Name = "BB" };
var merged =
i1.Merge(i2);
}
}
在以下示例中,静态方法 合并 用于处理 信息 对象,并定义在类 服务 中。 我们使用重构将 合并 转换为类 信息 的实例方法,这是其逻辑所属的位置:
class Service
{
public static Info Merge(Info i1,
Info i2)
{
return new Info
{
Id = i1.Id + i2.Id,
Name = i1.Name + i2.Name
};
}
}
class Info
{
public string Id { get; set; }
public string Name { get; set; }
void Test()
{
var info1 = new Info()
{ Id = "123", Name = "AA" };
var info2 = new Info()
{ Id = "456", Name = "BB" };
var merged =
Service.Merge(info1, info2);
}
}
class Service
{
}
class Info
{
public string Id { get; set; }
public string Name { get; set; }
void Test()
{
var info1 = new Info()
{ Id = "123", Name = "AA" };
var info2 = new Info()
{ Id = "456", Name = "BB" };
var merged =
info1.Merge(info2);
}
public Info Merge(Info i2)
{
return new Info
{
Id = Id + i2.Id,
Name = Name + i2.Name
};
}
}
将静态方法转换为实例方法

最后修改日期: 2025年 9月 26日