Self
The self
keyword refers to the current instance of the class that a block of code belongs to. It provides access to the members of the class (although by default they are in scope without the need for a self
, and also makes the current instance available, for exa ple to be passed or assigned to other places.
type
Foo = public class
private
property Value: String;
public
method Test;
begin
var x := Value; // members can be access directly...
var u := self.Value; // ... but also via `self`;
var f: Foo := self; // `self` represents the instance as a whole.
end;
end;
As discussed in Member Access Expressions, self
can be helpful to avoid ambiguity, or access class members that are "hidden" from by another identifier of the same name. It can also provide clarity and code improve readability, in places where it might not be obvious which identifiers refer to type members, and which don't:
method UpdateValue(Value: String);
begin
self.Value := Value; // the paramer hides the property
end;
Self in Static Members
In static
members (defined with the static
modifier or the class method
/class property
, class var
or class event
prefix), self
refers to the (platform-specific) meta-class that describes the current type. This can be assumed to be unique for each type, and distinct for separate types, and allows for polymorphism (i.e. in descendant class, self
will refer to the descendant meta-class:
self
inside a static member is identical to typeOf
(self)
in an instance method.
See Also
- Member Access Expressions
- Inherited Expressions
typeOf
System Function