Fab*_*zio 6 delphi access-modifiers
我正在一个旧的旧项目中工作,该项目有几个类,在其中published始终声明该节而内部没有任何内容,即:
TMyClass = class
public
procedure DoSomething();
published
end;
Run Code Online (Sandbox Code Playgroud)
编译时,我收到以下警告消息:
[DCC警告] uMyUnit.pas(141):W1055发布导致RTTI($ M +)添加到类型'TMyClass'
我不知道前任开发人员是否published出于某些正当理由声明了这些部分。删除空白published部分始终是安全的,还是会导致应用程序行为发生某些变化?
Ste*_*nke 10
类本身没有区别-但是重要的是,任何继承自类的类的默认可见性{$M+}从公开变为公开!
请参见以下示例代码:
uses
TypInfo;
type
TMyClass = class
private
fName: string;
property Name: string read fName;
published
end;
TMyOtherClass = class(TMyClass)
property Name;
end;
var
propCount, i: Integer;
props: PPropList;
begin
propCount := GetPropList(TypeInfo(TMyOtherClass), props);
for i := 0 to propcount - 1 do
Writeln(props^[i].Name);
Readln;
end.
Run Code Online (Sandbox Code Playgroud)
你可以看到它列出的Name属性,但是当你删除从公布TMyClass它不会-这是因为一旦TMyClass得到{$M+}补充,而不明确说明,将公布反对公众知名度声明的任何成员。
同样,其他声明为不可见的成员(例如字段)也将被发布。这在Delphi用于表单等的流系统中正在使用。例如,您可以然后调用TObject.FieldAddress或TObject.MethodAddress传入字段或方法的名称,并获取指向该字段或方法的指针。它仅适用于已发布的字段和方法。
这是如何从DFM套起来像所有那些IDE生成的字段加载Button1或连接Button1Click方法的Button1.OnClick-他们是在没有从继承的窗体顶部明确的知名度TComponent已经{$M+}宣布。
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |