How do I create a ClientDataset dynamically at run-time?

procedure TForm1.Button1Click(Sender: TObject);
begin
  with MasterCDS.FieldDefs do
  begin
    Add('FIRST_NAME',ftString,20,False);
    Add('LAST_NAME',ftString,20,False);
    Add('PHONE_NUMBERS',ftDataSet,0,False);
    with Find('PHONE_NUMBERS').ChildDefs do
    begin
      Add('PHONE_NUMBER',ftString,15,False);
      Add('EXTENSION',ftString,6,False);
    end;
  end;
  MasterCDS.CreateDataSet;
  DetailCDS.DatasetField := MasterCDS.FieldByName('PHONE_NUMBERS') as TDatasetField;
end;