• Delphi第十天学习笔记


    窗体的创建

    1,按需动态创建,如下图

    • 注意:这样声明依旧会有内存泄漏的风险,因为frmTest是全局变量。
    • 故应该尽量使用局部变量

    2,在dproj文件中使用Application.Create(TFormTest, frmTest)

    • 这是Delphi在我们新建窗口时默认自动添加到dproj文件中的
    • 除了窗口数很少的项目,不推荐使用这种方法,因为它是初始化时就创建所有窗口,在窗口数很多的情况下耗时是很恐怖的
    • 这种方法创建的窗口只有当程序关闭时才会释放

    窗体的销毁

    • 调用Destroy等方法
    • 在Form的关闭事件OnClose中设置,如下

    Destroy和Free以及FreeAndNil、Release

    • Destroy:虚方法。直接销毁对象
    • Free:静态方法。判断指针是否为Nil,不为Nil则调用Destroy,安全性较高,但有产生野指针的风险
    • FreeAndNil:一般过程。先将指针重置为Nil,再释放该指针原来指向的对象所在内存
    • Release:TCustForm中的方法。等待资源不再使用后才通过Free来释放资源。

    Delphi中的Property关键字

    • Property定义了类的属性,该属性的值通过Read后的字段或方法获取,并由Write后的字段或方法设置

    • 例:定义了一个属性MyData,它与私有属性FData相关,通过SetMyData赋值,通过GetMyData取值

    • 属性赋值时会调用Write关键字后的Setter方法,对输入值进行处理后才赋值

    • 读属性值时会自动调用Read关键字后的Getter方法,获取并返回处理后的数据

    • 属性没有被分配内存,所以也被称为‘虚拟字段’,因此不能作为引用参数传递给方法或对象

    • Read和Write可以单独出现,只有Read时该属性为只读属性,只有Write时该属性只能被修改不能获取值

    Delphi中的构造器和析构器

    构造器Constructor

    • 构造器关键字:constructor
    • 默认构造器名:Create
    • 构造器的作用:为类实例分配内存并初始化
    • 可以用Overload重载多个构造器,建议用Create作为构造器的名字,因为这能隐藏系统默认的构造器

    析构器Destructor

    • 析构器关键字:destructor
    • 默认析构器:Destroy
    • 析构器的作用:释放类实例所占用的内存
    • 释放内存时应用Free或FreeAndNil方法,而不应该直接调用Destroy

    类中方法的重写

    • 要求:该方法为虚拟方法,即用关键字Virtual标识

    第一种方法:使用Inherited

    • 使用Inherited可以调用父类的方法
    • 在重写代码中使用Inherited实现

    第二种方法:使用Override关键字标识

    Delphi运行时库RTL

    System单元

    • System单元是RTL的核心单元,会自动包含在所有编译过程中
    • 包含了TObject类、IInterface等接口、大部分数据类型、内存分配子例程、包和模块支持代码、线程支持等

      SysInit单元
      • System单元的伴随单元,包含了系统初始化代码,以及一些很少使用的函数
      SysConst单元
      • 定义了用于其它单元显示消息的常量字符串,用ResourceString定义
      SysUtils单元
      • 包括不同类型系统公用的函数,如IntToStr等
      数学单元Math
      • 包含用于数学计算的大部分函数

      三值逻辑函数IfThen:例: I := IfThen(NumA > NumB, NumA, NumB);与Java中的 Flag? A:B类似
      RandomRange: 从一个范围中随机取一个数
      RandomFrom: 从一个数组中随机取一个值
      EnsureRange(Num, Min, Max): 使整型数值处于指定范围内,如果超出范围则使其值变为该范围的上限或下限
      VarEnsureRange..:同上,但可以是其它有序类型的数值

      日期单元DateUtils
      字符串函数单元StrUtils
      Types
      • 保存多个操作系统公用的数据类型,如TPoint、TRect等

    TOBject类

    • Delphi中的唯一的根类,System单元中的核心类,所有类都直接或间接地继承自它
    • 可以接受任意类型的对象,但使用该对象自定义的方法时需要强制向下转型
    • 通过类引用可以在运行时动态改变对象
    • 重要属性:

    Create、Destroy、Free
    ClassName: 返回该对象的类名
    ClassNameIs(sName):判断该对象的类名是否与sName相同
    ClassType: 返回该对象的类引用
    ClassParent: 返回该对象父类的类引用
    InheritFrom(TClass):该对象是否继承自指定类

    其它内容

    • 判断指针P是否为Nil: Assigned(P),P为nil则返回False,否则返回True
  • 相关阅读:
    Python 里的下划线
    浅谈TCP拆包粘包问题
    40 张图带你搞懂 TCP 和 UDP
    头条面试官问:如何保证网络传输的可靠性?这就很尴尬了
    TCP协议灵魂12问,面试总会用得到(建议收藏)
    TCP网络握手
    HTTP1.0、HTTP1.1和HTTP2.0的区别
    面试官:这波HTTP究极combo,你顶得住吗?_chuhe1989的博客-CSDN博客
    腾讯面试官:说一下Android网络知识和框架?
    网络通信必备基础之Http协议&TCP/IP协议(二)
  • 原文地址:https://www.cnblogs.com/wuchangxing/p/15262949.html
Copyright © 2020-2023  润新知