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.

Nota: O parâmetro AUTO não é aconselhado pela Borland, pois pode gerar executáveis extremamente grandes, e que em conseqüência do aumento de desempenho, o executável ficará ligeiramente maior.

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.

Nota: O compilador Delphi tanto .NET para Win32 suportam tipos aninhados.