Delphi 如何使已弃用的接口函数停止显示编译器警告?
我有一个接口,和一个相应的接口对象。在这些函数中,我在接口和接口对象中将其中一个函数标记为Delphi 如何使已弃用的接口函数停止显示编译器警告?,delphi,interface,deprecated,delphi-10-seattle,Delphi,Interface,Deprecated,Delphi 10 Seattle,我有一个接口,和一个相应的接口对象。在这些函数中,我在接口和接口对象中将其中一个函数标记为已弃用: type ISomeInterface = interface function SomeFunctionName: String; deprecated; end; TSomeInterface = class(TInterfacedObject, ISomeInterface) function SomeFunctionName: String; deprecat
已弃用
:
type
ISomeInterface = interface
function SomeFunctionName: String; deprecated;
end;
TSomeInterface = class(TInterfacedObject, ISomeInterface)
function SomeFunctionName: String; deprecated;
end;
但是,在编译时,我收到一个编译器警告:
不推荐使用符号“SomeFunctionName”
这来自接口对象的定义,其中表示TSomeInterface=class(…
)。如果我从接口对象中删除deprecated
,警告将消失。但我仍然希望在该函数上标记此警告
我需要做什么才能停止此编译器警告,同时仍将其标记为“已弃用”?我应该只在接口上标记它,而不是同时在两者上标记它吗?或者是否有方法指示编译器不要发出警告?似乎存在编译器错误(或至少定义奇怪的行为).然而,我认为你可以实现你想要的,而不会遇到那个问题 编译器的问题似乎是,同时具有接口方法和该方法的实现标记为
已弃用
会导致弃用警告,即使该接口方法从未实际使用过
但您不需要同时标记这两个
将您的接口方法标记为已弃用,并保留该方法的实现未标记。我还强烈建议您将您的接口方法设置为私有或至少受保护,以避免通过对象引用访问它们
方法的实现满足必须实现接口的约定。因此,接口上方法的弃用状态仅对通过该接口使用该方法的任何代码重要
只有当代码通过接口引用引用了不推荐使用的方法时,才会收到警告:
type
ISomeInterface = interface
function SomeFunctionName: String; deprecated;
procedure OtherProc;
end;
TSomeInterface = class(TInterfacedObject, ISomeInterface)
private // ISomeInterface
function SomeFunctionName: String;
procedure OtherProc;
end;
// ..
var
foo: ISomeInterface;
begin
foo := TSomeInterface.Create;
foo.SomeFunctionName; // Will emit the deprecated warning
foo.OtherProc; // Will emit no warning
end;
即使你的项目不调用函数,你也能得到警告吗?“约翰,确切地说,只是在接口对象中单独定义它。但是这就是接口的全部要点,没有实现就毫无意义。我个人认为,这是一个编译器错误,或者一般来说,有些东西被忽略了。我应该能够把它标记为<代码> DeCract。ed在两个地方都没有警告。“或者有没有办法指示编译器不要发出警告?”也许不是你想要的答案,但是使用{$WARNINGS OFF}和{$WARNINGS ON}会有用吗?@Jerry:如果类只是接口的实现,而不是单独使用的话(即,您永远不会直接在类实例上调用该方法,只能通过接口间接调用),没有必要像Deltics已经说过的那样将类的方法标记为已弃用。@Rudy这在某些情况下可能是正确的,但在我的情况下,开发人员可以选择。类似于Delphi中的XML库。您可以创建
TXmlDocument
组件(对象),或改用IXmlDocument
。在我的情况下,情况基本相同。仅仅因为我有一个接口,并不意味着我自动拒绝使用对象的选项:-)