gpt4 book ai didi

c# - 如何将代码标记为 "not for future use"

转载 作者:可可西里 更新时间:2023-11-01 08:34:15 25 4
gpt4 key购买 nike

我经常遇到这样的情况,我想劝阻其他开发人员不要继续使用某个方法或类。例如,假设我有两个库方法“A”和“B”,其中“A”是执行某些任务的“旧”方式,而“B”是执行该任务的"new"方式。在许多情况下,A 和 B 有足够的不同,使得使用 A 开始使用 B 的重构代码非常重要(例如,需要流过额外的状态)。由于 A 在使用它的情况下有效,我不想优先考虑重构。但是,我确实想给我的开发人员一个直观的指示,表明 A 不会在新代码中使用。

因此,我希望您在使用 ObsoleteAttribute 引用成员时得到删除线。没有相关的编译器警告/错误(因为打开它会从 A 的所有旧用法中发出数百个错误,我们不打算很快解决这些错误)。这样,如果开发人员使用 A 编写新代码行,他或她会立即注意到删除线并修复代码以使用 B。

有没有办法在 VisualStudio (2012) 中获得这样的功能?

编辑:

  • 关于“无法区分新旧代码”的影响,有几条评论。我同意。但是,这不是我要的,所以让我澄清一下:相反,我想要的是代码“过时”(例如删除线)的视觉表示,没有相应的编译器警告或错误。这样,在阅读旧代码或编写新代码的过程中,开发人员将立即获得一些过时的视觉指示。即使这在 .NET 中不受 native 支持,也许有一个用于此目的的 VS 扩展?
  • “你不能同时有警告和没有警告”的效果有几条评论。我以为我解释了上面的用例,但我会再试一次。我们有一组核心库,它们在构成我们代码库的各种解决方案中大量使用。有时,我会更新这些库中的一个,它提供了一个新的、更好的 API 来执行某些任务。为了保持向后兼容性,我不能只删除执行该任务的旧方法(在许多情况下),因为大量现有代码依赖于使用旧的 API 集,并且不能简单地重构以使用新的 API。此外,没有紧迫的理由这样做。它只会冒着将错误引入现有代码的风险。但是,我希望以某种方式向开发人员发出视觉警告,即应避免使用某些 API 以支持其他 API。这很困难,因为开发人员倾向于通过阅读完成相同任务的现有代码来学习如何完成某些任务。这使得新的 API 难以传播,因为旧的根深蒂固的 API 被大量现有代码引用。 ObsoleteAttribute通过编译器警告实现这一点,但这些警告只会从旧 API 的数百种现有用途中产生大量噪音。这就是我喜欢删除线的原因:它非常直观,但只有在开发人员阅读或编写使用过时 API 的代码时,它才会打扰到开发人员。以下是我想标记旧 API 的一些更改示例:
  • 我们引入了一个新的 API 来运行 SQL 查询,它比我们以前的更简洁、更古怪且更灵活。很难彻底删除旧的 API,因为它有很多可能依赖的古怪行为。但是,我想插入人们使用新的 API 以进行 future 的开发。
  • 我们有两套内部单元测试助手 API。旧的功能完善,但它依赖于继承,不是很灵活。较新的一种是使用属性构建的,并且更加灵活。数百个旧测试仍在使用旧 API 运行,但我想插入新测试的编写者使用新 API。
  • 我们的核心库有一些旧的随机遗留代码,它们并不真正适合,但此时很难删除。我想减少对这些类型和方法的新引用的添加。这样,在某些时候删除它们可能会变得具有成本效益,因为依赖于它们的现有代码由于正常流失而消失。
  • 进一步说明,我认为答案是 this question很好地描述了为什么即使您不建议在新代码中使用它,也可能不将其标记为过时。
  • 有几个评论/答案只是指出 ObsoleteAttribute 的存在。 .请注意,此问题的文本始终引用该属性。
  • 最佳答案

    添加 Obsolete您的方法的属性将在智能感知中添加删除线。

    [ObsoleteAttribute("This property is obsolete. Use NewProperty instead.", false)] 
    public static string OldProperty
    { get { return "The old property value."; } }

    要禁用警告,请在属性前添加:
    #pragma warning disable 612, 618

    并重新启用:
    #pragma warning restore 612, 618

    如前所述 here ,在您的项目文件中而不是在您的代码中放置一个 ignore 将是一个非常干净的解决方案。
    <WarningsNotAsErrors>618</WarningsNotAsErrors>

    编辑:另外,查看@JonHanna 关于使用 EditorBrowsable attribute 的回答.

    正如其他人所指出的,实际上有 2 个警告与 obsolete 属性一起抛出。

    编辑:
    #pragma warning disable 612, 618
    [Obsolete]
    #pragma warning restore 612, 618
    public class test1
    {...

    当您尝试使用 test1 时你会得到:

    enter image description here

    请注意,当您键入 var test = new test1() 时删除线不会发生。

    但是 test1 test = new test1()将显示删除线。

    关于c# - 如何将代码标记为 "not for future use",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21125799/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com