4

在 c# 中,我可以通过以下方式将某些功能标记为过时

[Obsolete]
void Foo()
{}

如果我使用这个函数,这告诉编译器抛出警告。

我想创建我自己的标签 [Experimental],它就像过时的一样会抛出一个警告,告诉构建代码的用户这个函数没有经过很好的测试,使用它可能会导致麻烦。

是否有可能做到这一点?如何?

4

4 回答 4

14

我想创建自己的属性[Experimental],就像[Obsolete]使编译器产生警告一样。是否有可能做到这一点?

不,对不起。 Obsolete是一个很特殊的属性。编译器有专门为它编写的代码。C# 中没有可扩展的警告机制。

如果您想将此建议提交给 Visual Studio 团队,可以在http://visualstudio.uservoice.com/上进行。

于 2013-05-10T14:37:36.387 回答
3

Obsolete属性是特殊的,因为 C# 编译器知道它。您将无法创建自己的。你能得到的最接近的是从ObsoleteAttribute你自己继承,但是这个类是sealed不可能的。

事实上,您可以将您的方法标记为[Obsolete("This method is not well tested.")]. 这是你能做的最好的。

于 2013-05-10T14:35:28.730 回答
1

您可以将其添加为属性。

[System.AttributeUsage(AttributeTargets.All)]
public class Experimental: System.Attribute
{

}
于 2013-05-10T14:34:50.830 回答
1

我认为你可以用 PostSharp 做到这一点。SO上有一篇关于它的帖子,但我现在只有书签链接:

http://fgheysels.blogspot.com/2008/08/locking-system-with-aspect-oriented.html

在该页面的编译时间验证下查看,它向您展示了作者是如何做到的。

进一步说明:它涉及一些管道代码。绝对不是“将其放入项目中”的各种代码。

于 2013-05-10T14:36:50.323 回答