unit symbols; {$M+} interface uses interfaces; type TSymbol = class(TInterfacedObject, ISymbol, IInterface) private fName : UTF8String; fValue : IInterface; // if any. protected function GetName : UTF8String; function GetValue : IInterface; procedure SetName(const aValue : UTF8String); procedure SetValue(const aValue : IInterface); published constructor Create(aName : UTF8String); property Name : UTF8String read GetName write SetName; // do NOT modify after interning. property Value : IInterface read GetValue write SetValue; // property HomePackage : IHomePackage end; implementation { TSymbol } function TSymbol.GetName : UTF8String; begin Result := fName; end; function TSymbol.GetValue : IInterface; begin Result := fValue; end; procedure TSymbol.SetName(const aValue : UTF8String); begin fName := aValue; end; procedure TSymbol.SetValue(const aValue : IInterface); begin fValue := aValue; end; constructor TSymbol.Create(aName : UTF8String); begin fName := aName; end; end.