downcasting) //czyli bez rzutowania zmiennej do pewnego typu pochodnego

var aa := 'abc'; //brak deklaracji typu! var bb := 'def'; DoSwap<String>(aa, bb); //bez rzutowania uszczegóławiającego w tej metodzie

DoSwap(1.1, 1.2); //brak deklaracji typu dla parametrów Console.ReadLine(); end;

class method GenericMethodTest.Swap<T>(var left, right : T); begin var temp := left; left:= right; right := temp; end;

end.

Wyniki:

Typ: System.Int32 -> a = 23, b = 15 -> a = 15, b = 23 Typ: System.String -> a = abc, b = def -> a = def, b = abc Typ: System.Double -> a = 1,1, b = 1,2 -> a = 1,2, b = 1,1

Obsługa typu string w instrukcji case (odpowiednika switch w języku C) case aClassID.ToUpper of 'XYZ': result := TMyXYZClass; 'ABC': result := TMyOtherClass; else raise new Exception('Invalid Class ID'); end;

Rozróżnianie typów klasy w instrukcji case case aClass type of TMyXYZClass: TMyXYZClass(aClass). DoSomething; TMyOtherClass: TMyOtherClass(aClass). DoSomethingElse; else raise new Exception('Invalid Class Reference'); end;