是否存在与ObsoleteAttribute相反的属性

本文关键字:属性 ObsoleteAttribute 存在 是否 | 更新日期: 2023-09-27 18:15:37

换句话说,是否存在一个Attribute标记一段代码不是太,而是太新的,因此还没有准备好广泛使用?

如果我必须创建一个自定义Attribute来完成这一点,那很好。我只是想先确认一下

是否存在与ObsoleteAttribute相反的属性

不,这没有标准化。你可能想要考虑不像那样暴露代码——或者只在测试版中暴露它等等。

不是属性,但是我们可以使用预处理器指令(https://msdn.microsoft.com/en-us/library/ed8yd1ha.aspx)将代码区域标记为"太新"而不能运行。基本上,你可以定义一个标志来表示这段代码准备好了。

下面是一个例子:

#define FOREST_CAN_RUN
//undef FOREST_CAN_RUN --> disable that feature
using System;
namespace Test
{
    public class Forest
    {
        public void Run()
        {
#if FOREST_CAN_RUN
            Console.Write("Run Forest, Run !");
#else
            Console.Write("Sorry, Jenny");
#endif
        }
    }
    public class Program
    {
        static void Main(string[] args)
        {
            Forest f= new Forest ();
            f.Run();
        }
    }
}

自从。net 6有RequiresPreviewFeaturesAttribute可以用于这个目标。实际上,它被用于。net 6的通用数学预览。来自。net 6的预览功能-泛型数学:

其他一切的中心是新的RequiresPreviewFeatures属性和相应的分析器。该属性允许我们在现有类型上注释新的预览类型和新的预览成员。有了这个功能,我们可以在支持的主版本中发布一个不支持的预览特性。

请注意,目前它是由。net团队使用的,并且没有一种方法来区分功能(它要么启用所有功能,要么禁用所有功能),但从理论上讲,推出一个带有自定义Roslyn分析器的自定义功能应该不是那么困难,它将能够区分功能(例如使用类似的方法-使用命名功能的子集合添加到.csproj相应的自定义部分)。