gpt4 book ai didi

c# - 在不破坏代码的情况下重命名接口(interface)

转载 作者:行者123 更新时间:2023-11-30 17:47:00 25 4
gpt4 key购买 nike

如果我想在不破坏现有代码的情况下重命名接口(interface),这行得通吗?

旧界面:

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

}

因此,如果我有一个使用旧接口(interface)的 Foo 类,我现在将其更改为使用新接口(interface)。 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);

我的问题受到了这个问题的启发: A definitive guide to API-breaking changes in .NET以及有人通过重命名我正在使用的一些界面做出了重大改变。

最佳答案

在真正重命名的情况下:每个人都需要重新编译才能接受该更改。坦率地说,这是一个危险的变化。接口(interface)是契约,不应重命名。但是,如果重命名不可避免,这至少会让他们知道将其更改为什么。

--

但是,实际上:您所展示的不是重命名;它是半强制性延期; IFoo 仍然存在并且仍然具有旧功能。大概您希望人们开始提供 IFooNew 实现。这是合理的,但您的目标应该是确保如果消费者实现IFoo,那么它会继续工作。

关于c# - 在不破坏代码的情况下重命名接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25271245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com