;-TOP DeclareModule MyDataSet Interface iMethode Output() Free() EndInterface Structure sRect x.i y.i Width.i Height.i EndStructure Structure sProperty Invoke.iMethode Text.s Value.i Rect.sRect EndStructure Declare New(Value.i) EndDeclareModule Module MyDataSet Structure sPrivate Value.i EndStructure Structure sObject *vTable Public.sProperty Private.sPrivate EndStructure Procedure Output(*this.sObject) With *this MessageRequester("Update", "Text = " + \Public\Text + #LF$ + "Value = " + \Public\Value + #LF$ + "Private Value = " + \Private\Value) EndWith EndProcedure Procedure Free(*this.sObject) FreeStructure(*this) EndProcedure Procedure New(Value.i) Protected *Data.sObject = AllocateStructure(sObject) If *Data With *Data ; Referenz für Methoden zuweisen \vTable = ?vTable ; Public zuweisen \Public\Invoke = *Data \Public\Text = "Default" \Public\Value = 1 ; Private zuweisen \Private\Value = Value EndWith EndIf ProcedureReturn *Data\Public EndProcedure DataSection vTable: Data.i @Output() Data.i @Free() EndDataSection EndModule ;-Test Global.MyDataSet::sProperty *set1, *set2 *set1 = MyDataSet::New(1) *set1\Text = "Hello" *set1\Value = 100 *set1\Invoke\Output() *set1\Invoke\Free() *set2 = MyDataSet::New(2) *set2\Text = "World" *set2\Value = 2019 *set2\Invoke\Output() *set2\Invoke\Free() ; IDE Options = PureBasic 5.71 beta 1 LTS (MacOS X - x64) ; CursorPosition = 62 ; FirstLine = 25 ; Folding = - ; EnableXP