我正在研究一项c#库,因此我们关注于不破坏向后兼容性,但我想知道是否可以仅更改参数名称并通过使用命名参数来保持向后兼容性?以下是我尝试做的示例:
[Obsolete("use ChangeSpecificFoo(SpecificFoo specificFoo)")]
public void ChangeSpecificFoo(SpecificFoo foo)
{
_specificFoo = foo;
}
//Compile error ... already defines a member called 'ChangeSpecificFoo' with the same parameter types
public void ChangeSpecificFoo(SpecificFoo specificFoo)
{
_specificFoo = specificFoo;
}
只是更改参数名称可能会存在破坏向后兼容性的潜在风险,因为某人可能正在使用命名参数调用该方法,例如
ChangeSpecificFoo(foo: someSpecificFoo)
,但我们不能通过添加正确参数名称的新方法来弃用该方法,因为参数名称不包括在方法签名中,所以编译器将其视为重复。有没有什么方法可以解决这个问题?我看到的唯一选择是更改方法名称,使其不重复,然后弃用旧方法;或者等待我们从参数列表中添加或删除参数,并在那时更改参数名称(这可能永远不会发生,因为该方法已经相当稳定);或者只需进行更改并在发现使用此库的代码时修复任何错误。