New (keyword)
From The Oxygene Language Wiki
This is a Language topic
Feel free to add your notes to this topic below.
The "new" operator
Similar to C#, new class instances are instantiated using the new keyword:
MyClass := new BaseClass(...);
For backward compatibility, Delphi Prism supports the ".Create" constructor:
MyClass := BaseClass.Create(...);
It is recommended that you use 'new' whenever possible though.
Inline Declaration
A class can be instantiated inline as a local variable and even within the interface section:
type MainForm = class(System.Windows.Forms.Form) {$REGION Windows Form Designer generated fields} // lines omitted {$ENDREGION} protected method Dispose(aDisposing: boolean); override; public constructor; class method Main; private var StringQueue: Queue<String> := new Queue<String>; StringStack: Stack<String> := new Stack<String>; IntegerQueue: Queue<Integer> := new Queue<Integer>; IntegerStack: Stack<Integer> := new Stack<Integer>; end;
Note: see Type Inference, which allows the following simpler code:
var StringQueue := new Queue<String>; StringStack := new Stack<String>; IntegerQueue := new Queue<Integer>; IntegerStack := new Stack<Integer>; end;
Using Class Instances
Inline declarations are possible because of the .NET garbage collection mechanism (see Finalizers), but there are classes that own other resources that need disposing. If a class implements IDisposable, then instantiate your class via 'using', which implicitly calls IDisposable.Dispose, e.g.:
using lWriter: StreamWriter := new StreamWriter(lFile) do begin fFiles.Add(lWriter); lWriter.WriteLine('#EXTM3U'); for f: string in lFiles do begin if Path.GetExtension(f) = '.mp3' then begin lFilename := fPrefix+f.SubString(length(fMusicFolder)); for w: StreamWriter in fFiles do begin w.WriteLine(lFilename); end; end; end;
Named Parameters
Delphi Prism supports the use of named parameters in a constructor call to set field or property values. This allows you to set values on a property without having to declare a variable:
type Person = class public constructor; empty; property Name: string; end; Persons.Add(new Person(Name := 'John'));
See Also
Area: Oxygene Language
Compiler version: Oxygene 5
Language Glossary — Keywords — Types — FAQ — How To