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