如果我想重命名接口而不破坏现有代码,这个方法可行吗?
旧接口:
新的、更名过的界面:
旧接口:
namespace RenameInterfaceNicely
{
/// <summary>
/// The old name of the interface.
/// </summary>
[Obsolete("IFoo is replaced by IFooNew.")]
public interface IFoo
{
void Test();
}
}
新的、更名过的界面:
namespace RenameInterfaceNicely
{
#pragma warning disable 0618
/// <summary>
/// IFooNew new name for the interface IFoo.
/// </summary>
public interface IFooNew : IFoo
{
}
#pragma warning restore 0618
}
如果我有一个使用旧界面的类Foo,现在我要改用新界面。那么Foo的用户会遇到麻烦吗?
变更前的Foo:
public class Foo : IFoo
{
public void Test()
{
// Do something
return;
}
}
变更后的Foo:
public class Foo : IFooNew
{
public void Test()
{
// Do something
return;
}
}
现有代码示例:
// Old code
IFoo oldFoo = new Foo();
oldFoo.Test();
IFoo oldFoo2 = new Bar().GetFoo();
...
Bar bar = new Bar();
bar.DoSomethingWithFoo(oldFoo);
新代码示例:
// New code
IFooNew newFoo = new Foo();
newFoo.Test();
IFooNew newFoo2 = new Bar().GetFoo();
...
Bar bar = new Bar();
bar.DoSomethingWithFoo(newFoo);
这个问题是受到这个问题的启发: .NET API破坏性变更的明确指南 以及有人通过重命名我正在使用的一些接口来进行破坏性变更。