繁体   English   中英

如何在C#中将特定参数标记为过时/弃用?

[英]How can I mark a specific parameter as obsolete/deprecated in C#?

我希望能够保持C#API与现在相同,但只是弃用方法调用中的一个参数。 是否可以这样做,或者我是否需要在没有参数的情况下创建新方法并将原始方法标记为过时?

简短回答:

您需要使用新签名创建新的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 ,您可以通知编译器将此方法的使用通告为错误。

经过一段时间后,您可以从代码中完全删除您的方法以进行清理。 这是敏捷软件开发方法所鼓励的重构方法的一部分。

这有帮助吗?

是的,我认为唯一的方法是创建一个没有参数的新方法,并使用ObsoleteAttribute标记原始方法。

使用Obsolete属性:

[Obsolete("Please use void AnotherMethod() instead", false)]
void SomeMethod(Int32 data){
}

属性中的布尔告诉编译器生成警告,如果将其更改为true,编译器将生成错误。 请参阅此处以获取相关文档。

是。 您只能将类型和类型成员标记为过时 ,而不是单个参数。 但是,您可以重载该方法,从而保留相同的名称并将旧的标记标记为过时:

class Act
{
    [Obsolete("DoSomething(int, int) is obsolete", false /*warn only*/)]
    public void DoSomething(int i, int j)
    {
    }

    public void DoSomething(int i)
    {
    }
}

我认为最好创建一个新方法。

你让参数过时了是什么意思? 这取决于该参数的特定值吗? 调用方法时,始终必须指定参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM