我希望能够保持C#API与现在相同,但只是弃用方法调用中的一个参数。是否可以这样做,或者我是否需要创建一个没有参数的新方法并将原始方法标记为过时?
答案 0 :(得分:26)
简答:
您需要使用新签名创建新的nethod,并将当前标记为过时。
更长的答案
您想要不惜一切代价避免的是代码中断!然后,特别是在公司框架中,您希望宣传您的方法将不再受支持,例如,您不希望由于架构或设计决策或您的方面而对依赖解决方案造成崩溃负责,对吗?
ObsoleteAttribute
课程可以帮到你。
一旦标记为过时的类成员,将在客户端,使用您的框架的人,以此方式,或甚至同一项目下的同事之间发出警告。
public class MyClass {
[Obsolete("This method should no longer be used, please use MyNewMethod() instead.")]
public void MyMethod(string name, long phoneNumber, long faxNumber) {
}
public void MyNewMethod(string name, long phoneNumber, long faxNumber, string email) {
}
}
这将宣传您的代码用户不再支持MyMethod
。
经过一段时间,合理到足以允许每个人更改他/她的代码,当代码中仍然使用过时的方法时,您可能会告诉此属性抛出错误消息。
public class MyClass {
[Obsolete("This method should no longer be used, please use MyNewMethod() instead.", true)]
public void MyMethod(string name, long phoneNumber, long faxNumber) {
}
public void MyNewMethod(string name, long phoneNumber, long faxNumber, string email) {
}
}
通过将第二个ObsoleteAttribute
类构造函数参数设置为true
,您可以通知编译器将此方法的使用通告为错误。
仅在一段时间后,您可以从代码中完全删除您的方法以进行清理。这是敏捷软件开发方法所鼓励的重构方法的一部分。
这有帮助吗?
答案 1 :(得分:8)
是的,我认为唯一的方法是创建一个没有参数的新方法,并使用ObsoleteAttribute
标记原始方法。
答案 2 :(得分:7)
使用Obsolete属性:
[Obsolete("Please use void AnotherMethod() instead", false)]
void SomeMethod(Int32 data){
}
属性中的布尔告诉编译器生成警告,如果将其更改为true,编译器将生成错误。有关其上的文档,请参阅here。
答案 3 :(得分:6)
是。您只能mark types and members of types as obsolete,而不是单个参数。但是,您可以重载该方法,从而保留相同的名称并将旧的标记标记为过时:
class Act
{
[Obsolete("DoSomething(int, int) is obsolete", false /*warn only*/)]
public void DoSomething(int i, int j)
{
}
public void DoSomething(int i)
{
}
}
答案 4 :(得分:2)
我认为最好创建一种新方法。
使参数过时是什么意思?这取决于该参数的特定值吗?当你调用一个方法时,你总是必须指定参数。