TEnumerable<T>,所有Generics.Collections容器类的基类都有一个非常奇怪的声明.它看起来像这样:
type
TEnumerable<T> = class abstract
protected
function DoGetEnumerator: TEnumerator<T>; virtual; abstract;
public
function GetEnumerator: TEnumerator<T>;
end;
function TEnumerable<T>.GetEnumerator: TEnumerator<T>;
begin
Result := DoGetEnumerator;
end;
Run Code Online (Sandbox Code Playgroud)
TEnumerator<T> 同样声明一个公共的MoveNext方法和一个私有的DoMoveNext函数,而MoveNext除了调用DoMoveNext之外什么都不做.
除了添加额外的函数调用开销,使调用堆栈更长,并且在尝试从这些基类继承的编码器的头脑中产生混淆之外,任何人都可以向我解释这个服务的目的吗?这种结构化方式是否有任何实际优势,因为如果有,我看不到它......
我想在我的代码中禁用特定警告(W1035),因为我认为编译器对此警告是错误的:
function TfrmNagScreen.Run: TOption;
begin
if ShowModal = mrOk then
Result := TOption(rdgAction.EditValue)
else
Abort
end;
Run Code Online (Sandbox Code Playgroud)
因为Abort投掷,结果不可能是未定义的EAbort.
我试过了:
{$WARN 1035 Off}:显然这仅适用于某些特定错误(请参阅文档){$W-1035}:什么都不做我知道我可以在项目选项中全局关闭警告,或使用{$WARNINGS OFF},但这不是这里的意图.
编辑:我现在已经将QC作为#89744了.
当我在代码中使用Delphi指令时,例如:
{$IFDEF something}
.
.
.
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)
我在哪里为项目分配"某事"这个词?我在一些地方试过项目选项,但它没有用.猜猜我找不到正确的.
我想在用户完成输入数据时返回字符串网格中单元格的内容.按下键盘上的Enter键或单击或双击另一个单元格时,用户完成.
在Lazarus中有一种FinishedCellEditing的方法,但在Delphi中则没有.如何在Delphi中检测到它?
我声明了两个全局变量:
var
gIsRunning: Boolean = False;
gLogCounter: Integer = 0;
Run Code Online (Sandbox Code Playgroud)
这些变量仅在主线程中写入,并在其他线程中读取.在这种情况下,这些变量是否安全?
我的Delphi程序作为NT服务运行,运行良好超过2个月,然后突然停止并生成崩溃转储:
错误应用程序名称:tca_shctisvc_ip.exe,版本:7.1.0.1843,时间戳:0x2a425e19错误模块名称:未知,版本:0.0.0.0,时间戳:0x00000000异常代码:0xc0000005错误偏移量:0x00000000
根据Windows事件日志中的信息,没有可用的真实地址.我能够将迷你转储加载到WinDbg中,它说有一个例外,但发现了堆栈帧的问题.一个不同的工具(Viewminidump)能够显示正在运行的线程的堆栈.
我从哪里开始解决此问题?
我有一个TStringGrid,我想删除选定的行.我试过的基本内容只删除了最后一行.如何删除任意行?
我正在使用此代码
type
TSomeClass = class(TOBject)
private
class var InstanceCount : integer;
class var TotalInstanceCount : integer;
public
class function instances: integer;
class function totalInstances: integer;
constructor Create;
destructor Destroy;
end;
constructor TSomeClass.Create;
begin
inherited Create;
Inc(InstanceCount);
Inc(TotalInstanceCount);
end;
destructor TSomeClass.Destroy;
begin
Dec(InstanceCount);
inherited;
end;
class function TSomeClass.instances;
begin
Result := InstanceCount;
end;
class function TSomeClass.totalInstances;
begin
Result := TotalInstanceCount;
end;
Run Code Online (Sandbox Code Playgroud)
我想创建一个实例计数器,并将一些类变量设置为私有.问题很简单,看看这张图:
正如您在红色框中看到的那样,我声明为私有的类变量.我不希望它们出现.我只希望公共类函数能够显示计数器.我能做什么?
在我的Win32 VCL应用程序中,我使用ShellExecute来启动一些较小的Delphi控制台应用程序.有没有办法控制那些控制台窗口的位置?我想以屏幕为中心启动它们.
delphi ×10
delphi-2009 ×2
tstringgrid ×2
crash ×1
debugging ×1
delphi-2007 ×1
events ×1
generics ×1
tor ×1