• Delphi中的published


    Delphi中类的published属性则是可以在属性列表中看到并使用的属性

    公布成员(published)和公共成员(public)具有相同的可见度,但published中声明的会显示在属性栏,public   不会!

        published和public的限制访问属性是一样的 ;不过,published一般用于组件编程中,而不常用于应用程序中。

    转自OBJECT   PASCAL

         "公布成员(published)和公共成员(public)具有相同的可见度。不同的是,运行时信息RTTI(runtime   type   information)为公布成员产生。RTTI允许应用程序动态地查询对象的域和属性、定位对象的方法。RTTI用于在下列情形下访问属性的值:保存 和加载文件时,在对象检查器(Object   Inspector)中显示属性时,将指定的方法(即事件处理程序)与指定的属性(即事件)关联时。

        公布属性只限于某些数据类型。序数、串、类、接口和方法指针等类型可以被公布;由此可见,提供的基类型其上下界范围的序数值在0到31之间的集合类型也可 以被公布,即集合必需适合于字节、字或双字(Byte,Word或Double   Word);除Real48之外,任何实数类型都可以被公布。数组类型的属性(不同于下面述及的数组属性array   properties)不能被公布。"

    通过RTTI可以获得一个类的所有Published属性
    var
    mTypeInfo: PTypeInfo;
    mTypeData: PTypeData;
    mPropList: PPropList;
    mPropInfo: PPropInfo;
    mPropCount, i: Integer;
    begin
    mTypeInfo := Form1.ClassInfo;

    mTypeData := GetTypeData(mTypeInfo);
    if mTypeInfo^.Kind <> tkClass then Exit;

    mPropCount := mTypeData^.PropCount;
    if mPropCount <= 0 then Exit;

    GetMem(mPropList, mPropCount * SizeOf(PPropList));
    try
    GetPropInfos(mTypeInfo, mPropList);
    for i := 0 to mPropCount - 1 do
    begin
    mPropInfo := mPropList^[i];
    ShowMessage(mPropInfo^.Name);
    end;
    finally
    FreeMem(mPropList, mPropCount * SizeOf(PPropList));
    end;
    end; 

    在TForm1 = class(TForm)下面多了Button1变量和Button1Click方法,它们其实是published类型的,当该类或父类使用了“{$M+}”编译指令的情况下,默认为published成员。published成员可以在Object Inspector看到,我们可以手工加上将代码改为:

    type

      TForm1 = class(TForm)

      published

        Button1: TButton;

        procedure Button1Click(Sender: TObject);

      private

        procedure PriShowMsg();

        { Private declarations }

      public

        procedure PubShowMsg();

        { Public declarations }

      end;

    在implementation中对上述方法进行定义:

    procedure TForm1.PriShowMsg;

    begin

      ShowMessage('私有方法调用');

    end;

    procedure TForm1.PubShowMsg;

    begin

    ShowMessage('公共方法调用');

    end;

    在Button1的OnClick事件方法中调用上述两个方法:

    procedure TForm1.Button1Click(Sender: TObject);

     begin

       PriShowMsg;

       PubShowMsg;

    end;

  • 相关阅读:
    字符串匹配常见算法(BF,RK,KMP,BM,Sunday)
    JSP基本语法总结【1】(jsp工作原理,脚本元素,指令元素,动作元素)
    JUnit【1】断言用法之assertEquals/True/False/ArrayEquals
    软件测试基础配置
    前端入门20-JavaScript进阶之异步回调的执行时机
    前端入门19-JavaScript进阶之闭包
    前端入门18-JavaScript进阶之作用域链
    前端入门17-JavaScript进阶之作用域
    前端入门16-JavaScript进阶之EC和VO
    前端入门15-JavaScript进阶之原型链
  • 原文地址:https://www.cnblogs.com/QuincyYi/p/12729143.html
Copyright © 2020-2023  润新知