O Inline como o próprio nome já diz (em linha), é uma operação executada pelo compilador em tempo de compilação fazendo com que o compilador substitua uma chamada pelas instruções definidas dentro de uma função ou uma procedure ou métodos.
O Inline pode aumentar o desempenho da aplicação, desde que usada com cautela, pois em alguns caso pode ter efeito contrário. Há duas maneiras de habilitar para que o compilador use Inline ou não. Primeira, definindo a função, procedure ou método com a palavra Inline, como mostra a Listagem 1.
Listagem 1. Função Inline
function funSoma: boolean; inline;
var
I, X, R: Integer;
begin
I := 5;
X := 6;
R := I + X;
end;
...
var
intResult: integer;
begin
intResult := 50 + funSoma;
end;
A segunda, é usando a diretriz {$INLINE}, com os parâmetros ON, OFF ou AUTO como no código a seguir:
interface
{$INLINE ON} { ON, OFF ou AUTO }
No parâmetro ON, o compilador considera as funções, procedures ou métodos definidas com inline, OFF o compilador desconsidera as declarações Inline e AUTO o compilador considera Inline em todas as funções pequenas, cujo seu tamanho de código seja aproximadamente 32 bytes ou menor. A Borland aplicou Inline em algumas rotinas da VLC e no RTL, onde ela julgou apropriada.
Há circunstâncias em que não se pode usar Inline, como, por exemplo, em métodos de uma classe que acesse membros protegidos dessa classe.
Type Nested
O Type Nested (tipos aninhado) é a declaração de um tipo dentro de outra declaração de tipo, ou seja, pode-se, definir uma classe dentro de outra. Nesse caso, a classe aninhada, só poderá ser instanciada e acessada da classe que a derivou. Evite declarar os tipos aninhados como públicos, a menos que haja uma razão justificável para fazê-la, veja na Listagem 2.
Listagem 2. Declarações de tipos aninhados
type
TOuterClass = class
strict private
myOuterField: Integer;
public
type
TInnerClass = class
public
myInnerField: Integer;
procedure InnerProc;
end;
procedure OuterProc;
end;
...
var
OuterClass: TOuterClass;
InnerClass: TOuterClass.TInnerClass;
Os tipos aninhados são usados em toda estrutura .NET, e durante toda programação POO, e apresentam uma maneira de manter junto os tipos conceituais relacionados e evitar conflitos. Constantes também podem ser declaradas em tipos aninhados como na Listagem 3.
Listagem 3. Constante aninhada
type
TMyClass = class
const
x = 12;
y = TMyClass.x + 23;
procedure Hello;
private
const
s = 'Contante tipo string';
end;
begin
writeln(TMyClass.y); { O valor de y é 35 }
end.
As constantes aninhadas podem ser de qualquer tipo simples como ordinal, real e string. Você não pode declarar uma constante aninhada, por exemplo, do tipo TDateTime.