当前位置:  开发笔记 > 编程语言 > 正文

Delphi 5:模拟"过时"或"弃用"方法的想法?

如何解决《Delphi5:模拟"过时"或"弃用"方法的想法?》经验,为你挑选了1个好方法。

我想将方法​​标记为过时,但Delphi 5没有这样的功能.

为了举个例子,这里有一个虚构的方法,它已被弃用并且是新的首选形式:

procedure TStormPeaksQuest.BlowHodirsHorn; overload; //obsolete
procedure TStormPeaksQuest.BlowHodirsHorn(UseProtection: Boolean); overload;

注意:对于这个假设的例子,我们假设使用无参数版本是非常糟糕的.没有" 使用保护 " 存在问题- 没有好的解决方案.没有人喜欢不必使用保护,但没有人愿意采取保护措施.所以我们让呼叫者在吹Hodir号角时决定是否要使用保护.如果我们默认无参数版本继续使用保护:

procedure TStormPeaksQuest.BlowHodirsHorn;
begin
    BlowHodirsHorn(False); //No protection. Bad!
end;

然后开发人员面临各种令人讨厌的东西的风险.如果我们强制无参数版本使用保护:

procedure TStormPeaksQuest.BlowHodirsHorn;
begin
    BlowHodirsHorn(True); //Use protection; crash if there isn't any
end;

如果开发人员没有得到任何保护,或者没有任何保护,那么就有可能出现问题.

现在我可以重命名过时的方法:

procedure TStormPeaksQuest.BlowHodirsHorn_Deprecatedd; overload; //obsolete
procedure TStormPeaksQuest.BlowHodirsHorn(UseProtection: Boolean); overload;

但这会导致编译错误,人们会嘲笑我(我真的不想听到他们的抱怨).我希望他们得到一个唠叨,而不是一个实际的错误.

我想添加一个断言:

procedure TStormPeaksQuest.BlowHodirsHorn; //obsolete
begin
   Assert(false, 'TStormPeaksQuest.BlowHodirsHorn is deprecated. Use BlowHodirsHorn(Boolean)');

   ...
end;

但我无法保证开发人员不会在没有断言的情况下发布版本,从而导致客户的恶意崩溃.

如果开发人员正在调试,我想过只使用一个断言:

procedure TStormPeaksQuest.BlowHodirsHorn; //obsolete
begin
   if DebugHook > 0 then
      Assert(false, 'TStormPeaksQuest.BlowHodirsHorn is deprecated. Use BlowHodirsHorn(Boolean)');

   ...
end;

但我真的不想导致崩溃.

如果他们在调试器中(这是我过去所做的一种技术),我想到显示一个MessageDlg:

procedure TStormPeaksQuest.BlowHodirsHorn; //obsolete
begin
   if DebugHook > 0 then
        MessageDlg('TStormPeaksQuest.BlowHodirsHorn is deprecated. Use BlowHodirsHorn(Boolean)', mtWarning, [mbOk], 0);

   ...
end;

但那仍然太具有破坏性.并且它导致代码在显示模式对话框时遇到问题,但对话框显然不明显.

我希望有一些警告信息会让他们唠叨 - 直到他们掏出他们的眼睛并最终改变他们的代码.

我想也许我添加了一个未使用的变量:

procedure TStormPeaksQuest.BlowHodirsHorn; //obsolete
var
   ThisMethodIsObsolete: Boolean;
begin
   ...
end;

我希望这只会在有人引用代码时引起提示.但即使你没有调用实际使用过时的方法,Delphi也会显示提示.

谁能想到别的什么?



1> Jim McKeeth..:

怎么样的

procedure TStormPeaksQuest.BlowHaldirsHorn; //obsolete
begin
  if DebugHook > 0 then asm int 3 end;  
  // This method is Obsolete!  Use XXXXX instead.
  Abort; // Optional, makes method useless  
  // old code here . . . 
end;

断言和showmessage之间的妥协.开发人员只需要按F9继续.你可以放入一个Abort,然后该方法什么都不做,这将迫使他们切换方法,而break会让他们意识到它.

我个人建议升级到更新版本的Delphi.2007年和2009年是很棒的版本,非常值得升级.

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有