在c#中,我可以通过
将某些功能标记为过时[Obsolete]
void Foo()
{}
这告诉编译器如果我正在使用此函数则抛出警告。
我想创建自己的标签[实验],就像过时一样,告诉用户构建代码的用户没有经过充分测试并使用它可能会导致麻烦。
有可能这样做吗?怎么样?
答案 0 :(得分:13)
我想创建自己的属性
[Experimental]
,正如[Obsolete]
所做的那样,编译器会产生警告。是否有可能做到这一点?
不,抱歉。 Obsolete
是一个非常特殊的属性。编译器具有为其编写的专用代码。 C#中没有可扩展的警告机制。
如果您想将此建议提交给Visual Studio团队,可以在http://visualstudio.uservoice.com/处执行此操作。
答案 1 :(得分:2)
Obsolete
属性很特殊,因为C#编译器知道它。你将无法创建自己的。你可以得到的最接近的是自己继承ObsoleteAttribute
,但是这个类是sealed
所以这是不可能的。
实际上,您可以将方法标记为[Obsolete("This method is not well tested.")]
。这是你能做的最好的事情。
答案 2 :(得分:1)
您可以将其添加为属性。
[System.AttributeUsage(AttributeTargets.All)]
public class Experimental: System.Attribute
{
}
答案 3 :(得分:1)
我认为你可以用PostSharp做到这一点。在SO上有关于它的帖子,但我现在有书签链接:
http://fgheysels.blogspot.com/2008/08/locking-system-with-aspect-oriented.html
在该页面的编译时验证下查看,它会向您显示作者是如何做到的。
进一步说明:它涉及一些管道代码。绝对不是一种“对项目进行打击”的各种代码。