当前位置: 首页 > 编程日记 > 正文

class function或class procedure是什么意思

类函数\类过程.   它们是直接操作在类上面(没有实例化的对象)

下面是Delphi    Help    的描述   
    
   A class method is a method (other than a constructor) that operates on classes instead of objects. The definition of a class method must begin with the reserved word 
   class. For example,   

   type   
    TFigure = class   
    public   
     class function Supports(Operation: string): Boolean; virtual;   
     class procedure GetInfo(var Info: TFigureInfo); virtual;   
     ...   
    end;   

   The defining declaration of a class method must also begin with class. For example,   

   class procedure TFigure.GetInfo(var Info: TFigureInfo);   
   begin   
    ...   
   end;   

   In the defining declaration of a class method, the identifier Self represents the class where the method is called (which could be a descendant of the class in which it is defined). If the method is called in the class C, then Self is of the type class of C. Thus you cannot use Self to access fields, properties, and normal (object) methods, but you can use it to call constructors and other class methods.   

   A class method can be called through a class reference or an object reference. When it is called through an object reference, the class of the object becomes the value of Self.


类方法(Class methods)是一类特殊的方法,它们在声明时要以 class 开头:
    type
      TFigure = class
     public
     ...
   class procedure GetInfo(var Info: TFigureInfo); virtual;
       ...
     end;
  实现时也以 class 开头:
 class procedure TFigure.GetInfo(var Info: TFigureInfo); 
 begin
  ...
  end;
  乍一看好象平时没有遇到过这个东东,好象这个东东也没有什么大作用,其实不然。比如我们有时为输入密码或其他常用数据专门做一个 Form,但由于其代码都在 Form 定义的 unit 里面,所以在使用时仅仅需要几行代码,比如:
    with TfrmPassword.Create(nil) do
    try
  ShowModal;
 finally
 Free;
 end;
    虽然这样的代码已经很简洁,但如果写多了还是很讨厌的。利用类方法可以使其更简洁:
    TfrmPassword = class(TForm) 
    ...  
    public {Public declarations }  
    class function Execute: TModalResult;  
    end; 
    ...
 class function TfrmPassword.Execute: TModalResult; 
 begin
  with TfrmPassword.Create(nil) do 
     try
       Result :=ShowModal; 
     finally
      Release; //注意此处必须为release不能为free! 
     end; 
    end; 
 然后只用一行 TfrmPassword.Execute; 即可直接完成调用!

转载于:https://www.cnblogs.com/lzj1981/archive/2013/04/28/3049419.html

相关文章:

pythonshell画图_Python Shell下使用matplotlib

Python Shell下使用matplotlibCreated Monday 10 December 2012matplotlib默认是延迟绘图直到脚本结束,因为绘图是一个高代价的操作。所以可能不想每次每个属性的改变就更新绘图,只有所有的属性都改变了才更新。但是,当在python shell上工作时…

大地坐标的概念 大地坐标系的举例和说明分类

大地坐标大地测量中以参考椭球面为基准面的坐标。地面点P的位置用大地经度L、大地纬度B和大地高H表示。当点在参考椭球面上时,仅用大地经度和大地纬度表示。大地经度是通过该点的大地子午面与起始大地子午面之间的夹角,大地纬度是通过该点的法线与赤道面…

C# 在用户控件中添加自定义事件

/// <summary> /// 用户控件 /// </summary> public partial class UCMyControl : UserControl {//定义委托//EventArgs 可以自己定义参数的类型&#xff0c;一般情况下定义为(object sender&#xff0c;EventArgs e)public delegate void SelectedValueChanged(o…

标准h5的定位_H5中的定位

这次给大家带来H5中的定位&#xff0c;H5中定位的注意事项有哪些&#xff0c;下面就是实战案例&#xff0c;一起来看一下。一.定位流分类1.1相对定位1.2绝对定位1.3固定定位1.4静态定位二.什么是相对定位?相对定位就是相对于自己以前在标准流中的位置来移动position: relative…

数据库开发基本操作-关于sql server 2005 未开放1433端口的问题

有些sql server 2005在安装过程中&#xff0c;可能将SQL server 服务的端口配置成了动态端口&#xff0c;没有使用默认的1433端口&#xff0c;从而导致了sql server 2005 的服务启动了&#xff0c;但是却没有开启1433端口。解决办法就是取消动态端口&#xff0c;并将端口改成14…

Java8内存模型—永久代(PermGen)和元空间(Metaspace)

一、JVM 内存模型 根据 JVM 规范&#xff0c;JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 1、虚拟机栈&#xff1a;每个线程有一个私有的栈&#xff0c;随着线程的创建而创建。栈里面存着的是一种叫“栈帧”的东西&#xff0c;每个方法会创建一个栈…

web server大全之GoAhead移植(转载)

转自:http://linux.chinaunix.net/techdoc/develop/2009/06/19/1119124.shtml 注&#xff1a;最近在做goAhead web server和移植其到TI芯片linux上&#xff0c;这里先转一篇相关的文章来学习下&#xff0c;希望有所帮助。。。 ******************************* * web server大全…

tomcat苹果版安装步骤_Mac系统安装和配置tomcat步骤详解

一:下载打开Apache Tomcat官网,选择需要的版本下载:二:存放到本地文件夹重名民为ApacheTomcat,放到/Users/计算机名/Library/目录下三:启动Tomcat打开Terminal,进入ApacheTomcat所在目录的bin目录下$:cd /Users/mymac/Library/ApacheTomcat/bin1启动Tomcat$:./startup.sh1如果出…

Oracle 11g 数据类型

Oracle 11g Datatypes VARCHAR2(size [BYTE | CHAR]) 可变长度的字符串的最大长度有大小字节或字符。最大尺寸是4000字节或字符&#xff0c;最低为1个字节或1个字符。您必须指定VARCHAR2大小。 字节表示该列将有字节长度语义。 CHAR列表示将字符语义。 NVARCHAR2(size) 可变长度…

《DSP using MATLAB》Problem 6.3

天不亮又醒了&#xff0c;拍了张景象&#xff0c;这就是黎明前的黑暗吗 转载于:https://www.cnblogs.com/ky027wh-sx/p/9569038.html

进程间通信--命名管道

几个术语 二义性&#xff1a;当我们往一个管道里面写端写数据的时候&#xff0c;比如写一个hello的时候&#xff0c;当我们写到he的时候&#xff0c;读端就已经开始读取数据了&#xff0c;所以这是不对的&#xff0c;这就是二义性临界资源&#xff1a;多个流可以访问的一个共同…

websocket心跳链接代码_WebSocket原理与实践(五)--心跳及重连机制

在使用websocket的过程中&#xff0c;有时候会遇到网络断开的情况&#xff0c;但是在网络断开的时候服务器端并没有触发onclose的事件。这样会有&#xff1a;服务器会继续向客户端发送多余的链接&#xff0c;并且这些数据还会丢失。所以就需要一种机制来检测客户端和服务端是否…

【转载】Asp.Net 全生命周期

用三张图片详解Asp.Net 全生命周期 此文是转载阳阳多的博客内容&#xff0c;特此声明。 下面我们使用三张图片解析ASP.net的整个生命周期&#xff0c;我总感觉使用图片更加的清楚的说明这种问题&#xff0c;所以使用的这样方式 说明&#xff1a; 1 第一张图片从全局说明从客户…

Context-Based Access Control (CBAC) 基于上下文的访问控制 理论知识

CBAC即基于上下文的访问控制协议&#xff0c;通过检查防火墙的流量来发现管理TCP和UDP的会话状态信息。这些状态信息被用来在防火墙访问列表创建临时通道。通过在流量一个方向上配置ip inspect列表&#xff0c;放行其返回流量。被允许会话是指来源于受保护的内部网络会话。它不…

week6 10 后端backend server和mongoDB通信

0 之前我们maogoDB用的是在线的mlab 在线他们帮我们做好了model 也就是那个schma 其实python也有类似的包 帮我们定义这些model 但是呢 我们自己来做吧 用一个传统的意义上mongoDB 就是 insert select来操作数据库 就是在不用其他类库 定义的model 我们如何操作数据库 我们这次…

Linux网络端口

Linux下端口个数 首先简单介绍一下Linux下的端口的函数&#xff0c;当Linux各个主机之间进行通信的时候我们需要将某些数据进程传输&#xff0c;这个时候就需要将数据传入到某一个特定 的主机&#xff0c;这个时候就使用了TCP/IP协议&#xff0c;IP地址是用来标识互联网的唯一…

汉字书写解码_《汉字解码学》   第一部分

《汉字解码学》第一部份汉字与世界密码文字的关系文字是人类语言的书写符号&#xff0c;是人类用来进行传递信息以便进行交流的可见符号系统。文字是人类文明的标识和产物。我们的祖先是如何来到中国的&#xff1f;世界科学研究关于人类基因的研究的最新成果表明&#xff1a;世…

WCF中服务继承多个契约的使用

服务继承多个契约其实也就是服务类实现了多个接口&#xff0c;主要是在配置中需要添加多个endpoint&#xff0c;各个endpoint之间的address不同、contract不同 契约&#xff1a; [html] view plaincopyprint?[ServiceContract] public interface IReportService { [Ope…

Pentaho平台上加仪表盘插件步骤

Pentaho平台上加仪表盘插件步骤 下面我将最近学习的在Pentaho平台上加仪表盘插件的步骤稍微整理了一下&#xff0c;希望对有需要的朋友有些帮助。 1. 解压插件包&#xff1a;cdf-de_0.2.tar.bz2&#xff08;这个插件压缩包我即将上传&#xff09; &#xff0c;得到cdf- de_0.2 …

2018.09.01 poj3071Football(概率dp+二进制找规律)

传送门 概率dp简单题。 设f[i][j]表示前i轮j获胜的概率。 如果j,k能够刚好在第i轮相遇&#xff0c;找规律可以发现j,k满足&#xff1a; (j−1)>>(i−1)(j−1)>>(i−1)^1(k−1)>>(i−1)1(k−1)>>(i−1)。 简单举个例子&#xff1f; 假设有八个人&a…

循环冗余检验CRC

CRC简介 循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数&#xff0c;主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。 在数据传输过程中&#xff0c…

弹性碰撞后速度方向_$1.1.1 弹性碰撞经典例题1——力学及运动学

[ph1] 质量为2m的木块放置于质量为m的长木板上&#xff0c;木块与模板之间的动摩擦系数为 μ &#xff0c;木板与地面的摩擦忽略不计。木块和木板以速度V0向右运动&#xff0c;在右侧足够远处有刚性墙壁&#xff0c;木块与墙壁发生完全弹性碰撞后向左运动&#xff0c;木板有足够…

一个简单实用的,基于EF的三层架构

到底什么样的框架才是好框架呢?或许不同人有不同的看法.我个人觉一个好的框架,最重要的要是简单实用,能快速适开发,可维护性高(不会出现复制黏贴的代码),并能快速响应各种业务场景的变化的框架,同时性能不会太差.我觉的这样的框架,就是一个好的框架.而且,我觉的做框架,千万不能…

转:中国互联网十五年的22个创新模式

中国互联网十五年的22个创新模式 今天&#xff0c;看网上有人推荐《沸腾十五年》&#xff0c;讲中国互联网从发源到现今。 有人有如此梳理&#xff0c;自己本来也想梳理一下中国互联网这么多年&#xff0c;到底是哪些公司出来了&#xff0c;为什么会是他们出来了。他们的…

2018 蓝桥杯省赛 B 组模拟赛(一)-年龄

今天蒜头君带着花椰妹和朋友们一起聚会&#xff0c;当朋友们问起年龄的时候&#xff0c;蒜头君打了一个哑谜&#xff08;毕竟年龄是女孩子的隐私&#xff09;说&#xff1a;“我的年龄是花椰妹年龄个位数和十位数之和的二倍”。 花椰妹看大家一脸懵逼&#xff0c;就知道大家也不…

C#中用ILMerge将所有引用的DLL和exe文件打成一个exe文件

今天做了一个软件,想发布的时候才发现调用的类没几个,就像把它们都跟EXE文件打包在一起,以后复制去别的地方用也方便,于是上网搜了一下,发现网上大部分都是用ILMerge实现的,于是也自己试了一下,不过网上都没有详细的步骤演示,我就花点时间做了个教程,方便以后再有人想打包自己的…

IPC--消息队列

消息队列的特点 消息队列是生命周期是随进程的&#xff0c;同时消息队列可以实现的是消息的传递方向是双向的。接受者和发送者时通过发送一个数据块来进性消息传递的&#xff0c;每个消息的数据类型不一样依次来进行区分我们该取哪个数据。消息队列是基于消息的&#xff0c;并…

sqlinesdata教程_如何将Oracle数据导入MySQL

Manager进程&#xff1a;需要源端跟目标端同时运行&#xff0c;主要作用是监控管理其它进程&#xff0c;报告错误&#xff0c;分配及清理数据存储空间&#xff0c;发布阈值报告等Extract进程&#xff1a;运行在数据库源端&#xff0c;主要用于捕获数据的变化&#xff0c;负责全…

关于PHP.ini文件的设定

php.ini文件中记录了php的配置&#xff0c;因此正确读取此配置文件对于php的部署实施很重要。 windows平台中&#xff0c;有2种常用的方法。 第一种方法&#xff1a;把php.ini复制到c:\windows目录中。 第二种方法&#xff1a;配置apache服务器&#xff0c;在..\Apache Softwar…

PAT (Advanced Level) 1132~1135:1132 模拟 1133模拟(易超时!) 1134图 1135红黑树

1132 Cut Integer&#xff08;20 分&#xff09; 题意&#xff1a;将一个含K&#xff08;K为偶数&#xff09;个数字的整数Z割分为A和B两部分&#xff0c;若Z能被A*B整除&#xff0c;则输出Yes&#xff0c;否则输出No。 分析&#xff1a;当A*B为0的时候&#xff0c;不能被Z整除…