Blubb(sender : Object; m : MyClass); delegate BlubbEx(sender : Object; mx : MyClassEx); Fields can be used to delegate the implementation of an interface, if the type they're of implements this interface: Implementor = public class(IMyInterface) // ... implement interface ... end; MyClass = public class(IMyInterface) fSomeImplementor : Implementor; public implements IMyInterface; //takes care of implementing the interface end; In this example the compiler will create public methods and properties in MyClass, which call the methods / properties of fSomeImplementor, to implement the members of IMyInterface. This can be used to provide mixin-like functionality. Anonymous methods Anonymous methods are implemented inside other methods. They are not accessible outside of the method unless stored inside a delegate field. Anonymous methods can use the local variables of the method they're implemented in and the fields of the class they belong to. Anonymous methods are especially useful when working with code that is supposed to be executed in a GUI thread, which is done in .NET by passing a method do the Invoke method (Control.Invoke in WinForms, Dispatcher.Invoke in WPF): method Window1.PredictNearFuture; //declared as async in the interface begin // ... Calculate result here, store in variable "theFuture" Dispatcher.Invoke(DispatcherPriority.ApplicationIdle, method; begin theFutureTextBox.Text := theFuture; end); end; Anonymous methods can have parameters, too: method Window1.PredictNearFuture; //declared as async in the interface begin // ... Calculate result here, store in variable "theFuture" Dispatcher.Invoke(DispatcherPriority.ApplicationIdle, method(aFuture : String); begin theFutureTextBox.Text := aFuture ; end, theFuture); end; Both source codes use anonymous delegates. Property notification Property notification is used mainly for data binding, when the GUI has to know when the value of a property changes. The .NET framework provides the interfaces INotifyPropertyChanged and INotifyPropertyChanging (in .NET 3.5) for this purpose. These interfaces define events which have to be fired when a property is changed / was changed. Oxygene provides the notify modifier, which can be used on properties. If this modifier is used, the compiler will add the interfaces to the class, implement them and create code to raise the events when the property changes / was changed. property Foo : String read fFoo write SetFoo; notify; property Bar : String; notify 'Blubb'; //will notify that property "Blubb" was changed instead of "Bar" The modifier can be used on properties which have a setter method. The code to raise the events will then be added to this method during compile time. Code examples Hello World namespace HelloWorld;