向后可比性
本文关键字:可比性 | 更新日期: 2023-09-27 18:21:57
如果我有一个函数返回了int LoadProgress(int),现在相同的函数被更改了,但它会破坏其他游戏项目,因为现在它返回了一个keypairvalue,但我错误地删除了原始的函数,该函数使用int lodprogress(int),添加相同的函数但具有不同的输入和输出可以吗?
还有一个功能可以从文件中保存和加载,这将破坏其他游戏项目,我如何确保向后兼容性
这太宽泛/不清楚了。需要更多的细节来回答您的具体问题。
添加相同的功能但有不同的输入和输出可以吗?
是的,但返回类型不是签名的一部分,即包含两个返回类型不同的方法的类不会编译。
我如何确保保存和加载文件的向后兼容性
同样,您需要显示代码并解释您想要更改的内容,以便正确回答此问题,但可选参数可能是可行的。
如果新方法比旧方法有另一个签名,那就可以了。
例如,它们的签名类型不同:
public void DoThis(int oldParameter) { }
public void DoThis(string newParameter) { }
这样做,因为返回类型不是签名的一部分:
public void DoThis(int oldParameter) { }
public int DoThis(int newParameter) { }
在该级别上没有向后兼容性。如果不将旧的加载到不同的AppDomain
中,就不能将旧的和新的混合在一起。在创建东西之前,请三思而后行,并根据需要调整旧代码以适应新代码。
方法名称不足以识别方法。
它的名称、返回类型和参数类型都定义了该方法。
基本上:void Foo(int)
不同于void Foo(string)
或int Foo()
。
当多个方法具有相同的名称时,这些方法被视为重载,编译器将根据您传递的参数选择正确的方法。
在您的情况下,如果不应该使用旧方法,除了您不想重写的遗留代码之外,我建议您使用Obsolete
属性。这将帮助开发人员通过在编译时生成警告(如果设置了标志,甚至会生成编译错误)来识别不推荐使用的方法:
[Obsolete("Please use the 'void Foo(int, string)' overload"]
void Foo(int a){
// old code
}
void Foo(int a, string b) {
// new code
}