From 6c7ed1b0d9a41698055c3b672f99d7a991b4831c Mon Sep 17 00:00:00 2001 From: michael Date: Sun, 6 Mar 2005 15:18:22 +0000 Subject: [PATCH] + Documented class methods --- docs/ref.tex | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/docs/ref.tex b/docs/ref.tex index 78d3255e37..2a04f07bee 100644 --- a/docs/ref.tex +++ b/docs/ref.tex @@ -2553,6 +2553,7 @@ an object. To get the size of the class instance data, use the %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Methods \section{Methods} + \subsection{invocation} Method invocation for classes is no different than for objects. The following is a valid method invocation: @@ -2562,6 +2563,7 @@ begin AnObject := TAnObject.Create; ANobject.AMethod; \end{verbatim} + \subsection{Virtual methods} Classes have virtual methods, just as objects do. There is however a difference between the two. For objects, it is sufficient to redeclare the @@ -2600,6 +2602,42 @@ Type ObjParent = Class \end{verbatim} This will compile and run without warnings or errors. +\subsection{Class methods} +Class methods are methods that do not have an instance, but which follow +the scoping and inheritance rules of a class. They can be called from inside +a regular method, but can also be called using a class identifier: +\begin{verbatim} +Var + AClass : TClass; + +begin + .. + if CompareText(AClass.ClassName,'TCOMPONENT')=0 then + ... + +\end{verbatim} +But calling them from an instance is also possible: +\begin{verbatim} +Var + MyClass : TObject; + +begin + .. + if MyClass.ClassNameis('TCOMPONENT') then + ... + +\end{verbatim} +Inside a class method, the self identifier points to the VMT +table of the class. No fields, properties or regular methods are available +inside a class method. Accessing a regular property or method will result in +a compiler error. The reverse is possible: a class method can be called from +a regular method. + +Note that class methods can be virtual, and can be overridden. + +Class methods cannot be used as read or write specifiers for a property. + + \subsection{Message methods} New in classes are \var{message} methods. Pointers to message methods are stored in a special table, together with the integer or string cnstant that @@ -2714,7 +2752,8 @@ A \var{read specifier} is either the name of a field that contains the property, or the name of a method function that has the same return type as the property type. In the case of a simple type, this function must not accept an argument. A \var{read specifier} is optional, -making the property write-only. +making the property write-only. Note that class methods cannot be used as +read specifiers. A \var{write specifier} is optional: If there is no \var{write specifier}, the property is read-only. A write specifier is either the name of a field, or the name of a method procedure that accepts as a sole argument a variable of