如何查看函数或过程是私有的、受保护的还是公共的,而无需滚动到顶部?

3

有没有办法知道一个函数或者过程是私有的、受保护的还是公共的呢? 现在我必须向上滚动查看方法是否为私有的。 是否有工具或结构(代码浏览器)可以查看方法是否为私有、受保护或公共,而不需要向上滚动。

示例:

 unit .....
 // 100 line code
 private
 // 1000 line code
   procedure A(); // <-- Here I can't see if the procedure is private. Must scroll to the top
 //  2000 line code 
 ...
 procedure A();  // <-- Here I can't see if the procedure is private. Must scroll to the top
 begin
   ...
 end;

现在我唯一能做的就是将其 (private, protected 或 public) 设置为摘要描述

在代码浏览器中,我看到过程的颜色为蓝色,函数的颜色为绿色,但没有 private、protected 或 public 图标。

我改变了 Explore Code 的属性,现在我有了 private、protected 或 public 的地图。

但是,当我进入代码中的一个过程时,在 Explore Code 中没有选定的项目,就像在 Project Manager 视图中一样。同样的情况也适用于 Explore Code。必须向上滚动地图,才能看到它是 private、protected 还是 public。一个替代方法是在 explored code 的搜索框中编写方法。然后,就会出现提示弹出窗口。

我找到了可能的解决方案:复制该方法并将其粘贴到 explorer code 的搜索框中。组合框列表弹出窗口会给我想要看到的内容(private、protected...)。


2
代码资源管理器窗口不是你需要的吗?http://docwiki.embarcadero.com/RADStudio/zh/Code_Explorer - David Heffernan
@DavidHeffernan:我在代码浏览器结构中看不到方法是私有的、受保护的还是公共的。 - Ravaut123
1
它没有指示图标吗?我现在无法检查。或者结构视图呢? - David Heffernan
不,只有蓝色(过程)或绿色(函数)颜色。 - Ravaut123
1
@Ravaut123,您需要在“工具|选项|环境选项|资源管理器”对话框中检查这些项目。 - LU RD
好的,找到了结构中的内容。已更改代码浏览器的属性。 - Ravaut123
4个回答

5
使用结构视图显示有关类声明的所有详细信息。
要控制视图的外观,请在工具>>选项>>环境选项>>资源管理器对话框中定义设置。

更新

如评论所述,您必须手动导航到结构视图以查看类结构。
提交增强请求QC 128271 Structure view lookup from editor,以便从编辑器快速查找结构视图。

还有类似项目管理器视图器那样能自动选择资源的探索代码中的相应功能吗? - Ravaut123
在结构视图中双击会将编辑器定位到相应的项目。在源代码编辑器中双击并不会高亮显示结构视图中的项目。或许可以将此作为一个请求报告给 QC。 - LU RD
近似解决方案:复制该方法并粘贴到Explore Code的搜索框中。弹出提示会提供信息。 - Ravaut123
+1 这可能就是结构视图的作用所在。虽然重载的方法会被归类到最高可见性修饰符下面。 - NGLN

3
“...无需滚动到顶部”
使用键盘快捷键CTRL-SHIFT-UP(或CTRL-SHIFT-DOWN)跳转到声明部分。
同样,使用相同的快捷键返回到实现部分。
如果不清楚声明属于哪个部分(私有、保护或公共),那么使用CTRL-UP进行滚动而不移动光标。

如果你有一个小的类,这个方法可以工作。尝试进入VCL代码并测试你的代码。 - Jens Borrisholt
1
@JensBorrisholt:这些快捷键在我的源代码D7和XE4中都可以正常工作,包括ComCtrls.Pas和MSHTML.Pas,它们是我能找到的最大的源文件。 - MartynA
2
@Jens 的意思是在大类中有太多的声明,你必须滚动查找可见性说明符。 - David Heffernan
1
@Jens 我明白你的意思,但我认为那个特定(微小)的额外滚动部分已经足够弥补使用鼠标或滚动到不知道搜索位置、折叠、在结构视图中搜索和展开项目,或使用CTRL-F进行搜索所需的时间和精力。 - NGLN
1
这也可以通过右键单击并在弹出菜单顶部选择“查找声明”来完成。 - LU RD

1

我可以推荐ModelMaker Code Explorer。虽然不是免费的,但物有所值。它展示了许多信息并提供了一些非常实用的重构工具。


0

不可以。因为Delphi将其类分成两个部分:接口和实现。

例如,在C#中,您需要以不同的方式处理。

public static byte[] ColumnBlob(Sqlite3Statement stmt, int index)
{
    return Sqlite3.sqlite3_column_blob(stmt, index);
}

在 Delphi 中,您将把类分成两个部分:

type 
   TSQLiteException  = class(TException)
   public
     class function  ColumnBlob(stmt : Sqlite3Statement, index : integer) : TArray<byte>;
   end;

以及实现:

function TSQLiteException.ColumnBlob(stmt : Sqlite3Statement, index : integer) : TArray<byte> ;
begin
  //Do stuff
end;

这两种方法都有优缺点:

C#的方式可以看到类的保护级别,但无法看到当前所在的类。

而Delphi则相反。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接