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;