jjzjj

Obsolete

全部标签

C# 自定义过时属性

我想知道是否可以创建一个自定义的过时类。我需要它,但我讨厌Obsolete在我输入之前显示此警告的事实:SOMETHINGisObsolete:.我只想在仅对我的输入使用字段/方法时发出警告/错误,例如:[CustomObsolete("Hello")]publicinti=0;会给出warning/debugHello.这可能吗?如果我使用#warning/#error,它总是会显示错误/警告。 最佳答案 不,ObsoleteAttribute被有效地硬编码到C#编译器中-无法创建C#编译器将理解为指示成员已过时的您自己的属性。就

c# - Obsolete 属性是否仅在编译时检查?

我想知道过时的属性是否只在运行时检查?假设您有两个程序集。程序集A使用程序集B中的方法。之后我们将程序集B中的方法标记为过时,这会在编译程序集A时导致编译时错误。到目前为止没有问题,但问题是旧程序集A是否继续与新程序集B一起工作?谢谢 最佳答案 这取决于你在做什么。[Obsolete]属性主要在编译时使用,但请注意运行时的某些部分在存在时具有不同的行为(见下文)。它可能会导致问题,即使对于未重建的现有代码也是如此,因此我们必须得出结论,NO,[Obsolete]仅在编译时间。例如,下面的代码将写成Foo而不是Bar:usingSys

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

我经常遇到这样的情况,我想劝阻其他开发人员不要继续使用某个方法或类。例如,假设我有两个库方法“A”和“B”,其中“A”是执行某些任务的“旧”方式,而“B”是执行该任务的"new"方式。在许多情况下,A和B有足够的不同,使得使用A开始使用B的重构代码非常重要(例如,需要流过额外的状态)。由于A在使用它的情况下有效,我不想优先考虑重构。但是,我确实想给我的开发人员一个直观的指示,表明A不会在新代码中使用。因此,我希望您在使用ObsoleteAttribute引用成员时得到删除线。没有相关的编译器警告/错误(因为打开它会从A的所有旧用法中发出数百个错误,我们不打算很快解决这些错误)。这样,如

c# - 为过时的 C# 事件生成警告

有没有人知道让VisualStudioC#编译器在使用过时事件时发出构建警告的技巧或解决方法?如果我创建一个带有公共(public)事件的简单程序集并将Obsolete属性应用于该事件,当我引用该程序集并订阅另一个项目中的事件时,编译器不会在我构建时发出警告(即使使用最高警告级别或设置为错误的警告)。项目一中的事件声明:publicclassAPIClass{[Obsolete("Obsoleteinv2.0")]publiceventEventHandlerObsoleteEvent;}在项目2中使用Obsolete事件不会导致生成警告:privatevoidSubscribeToE

c# - CodeDomProvider.CreateCompiler() 已过时

CSharpCodeProvidercodeProvider=newCSharpCodeProvider();ICodeCompilerMyCompiler=codeProvider.CreateCompiler();CompilerParametersmyParameters=newCompilerParameters();myParameters.GenerateExecutable=true;myParameters.OutputAssembly=@"prog.exe";myParameters.TreatWarningsAsErrors=false;CompilerResult

c# - 警告代码 cs0618 和 cs0612 有什么区别

我已经看到以下两个警告代码因使用标记为过时的代码而被抛出。cs0618和cs0612.根据文档,0618是2级,0612是1级。有谁知道这些代码之间的区别是什么以及是什么导致抛出一个而不是另一个? 最佳答案 我认为区别在于一个包含消息而另一个不包含消息。[Obsolete] //CS0612[Obsolete("UsenewMethodinstead",false)]//CS0618[Obsolete("UsenewMethodinstead",true)] //CS0619 关于c#-

c# - 为什么 C# 集合属性在调用它们的属性时没有标记为过时?

我试图将类上的集合属性标记为已过时以查找所有出现的事件并在我的警告列表中保留要修复的缩小列表,因为我们需要用其他东西替换这个集合属性.编辑:我已通过MicrosoftConnect提交,issue#417159.编辑16.11.2010:已验证这现在可以在C#4.0编译器中运行,无论是针对.NET3.5还是4.0进行编译。我在发布的代码中收到4条警告,包括注释为“不正常?”的警告。然而,令我惊讶的是,该列表只包含了一些事件,比我知道的要少得多,并且抽查告诉我,出于某种原因,该属性的使用并不总是被编译器标记为过时警告列表。这是一个示例程序,可以在VisualStudio2008中编译。请

c# - 为什么即使类被标记为 Obsoleted,这段代码仍能正确编译?

这是VisualStudio2008。显然与扩展的静态类有关。publicclassDummy{publicreadonlyintx;publicDummy(intx){this.x=x;}publicoverridestringToString(){returnx.ToString();}}[Obsolete("DoNotUse",true)]publicstaticclassExtensions{publicstaticintSquared(thisDummyDummy){returnDummy.x*Dummy.x;}}classProgram{staticvoidMain(str

c# - ConfigurationSettings.AppSettings 已过时

这个问题在这里已经有了答案:Thename'ConfigurationManager'doesnotexistinthecurrentcontext(19个回答)关闭9年前。下面的代码工作正常:stringapi_url=ConfigurationSettings.AppSettings["api-url"].ToString();警告信息如下:'System.Configuration.ConfigurationSettings.AppSettings'isobsolete:'"Thismethodisobsolete,ithasbeenreplacedbySystem.Config

c# - 如何在 C# 中将特定参数标记为过时/弃用?

我希望能够保持C#API与现在相同,但只是弃用方法调用中的一个参数。是否可以这样做,或者我是否需要创建一个没有参数的新方法并将原始方法标记为过时? 最佳答案 Shortanswer:您需要使用新签名创建一个新方法,并将当前方法标记为过时。Longeranswer您要不惜一切代价避免代码中断!然后,特别是在公司框架中,你想宣传你的方法将不再受支持,例如,但你不想因为架构或设计决策或你这边而导致依赖解决方案崩溃,对吧?ObsoleteAttribute类(class)将为您解决问题。一旦类(class)成员被标记为过时,将在客户端、使用