// Objektyp

module OOPDemo {


 // Anonymer Typ
 var Person: {
  id: number;
  name: string;
  ort: string;
 }

  var HerrMeier =
  {
   id: 123,
   name: "Max Meier",
   ort: "Berlin"
  }

    export function run() {
  Person = HerrMeier;
  ausgabe(Person.name + " wohnt in " + Person.ort);

  // dynamisches Objekt
  var flug1: any = {};
  flug1.FlugNr = 1;
  flug1.Abflugort = "Hamburg";
  flug1.Zielort = "Berlin";

  ausgabe("Flug " + flug1.FlugNr + " fliegt von " + flug1.Abflugort + " nach " + flug1.Zielort);

  // dynamisches Objekt
  var flug2: any = { FlugNr: 2, Abflugort: "Paris" };
  flug2.Zielort = "Rom";

  ausgabe("Flug " + flug2.FlugNr + " fliegt von " + flug2.Abflugort + " nach " + flug2.Zielort);



  //flug.ToString() = {"Flug " + flug.FlugNr + " fliegt von " + flug.Abflugort + " nach " + flug.Zielort };


 }



 // Klasse
 class Mitarbeiter {
  public id: number;
  public name: string;
  public ort: string;
  private gehalt: number;

  toString(): string {
   return this.name + " wohnt in " + this.ort;
  }

  constructor(arg?: IKontakt) {
   if (arg != undefined) {
    this.id = arg.id;
    this.name = arg.name;
    this.ort = arg.ort;
   }

   // Überladen nicht erlaubt!
   //constructor(id: number, name: string, ort: string) {
   // this.id = id;
   // this.name = name;
   // this.ort = ort;
   //}
  }



 }

 export function run2() {
  ausgabe("oop demo2");
  var Mueller: IKontakt = new Mitarbeiter();
  Mueller.name = "Hans Mueller";
  Mueller.ort = "Essen";


  var Mueller2: IKontakt = new Mitarbeiter(Mueller);

  ausgabe(Mueller.toString());
  ausgabe(Mueller2.toString());

  //Mueller.gehalt = 65432.21;
 }



 // ============ Call Signature

 export interface IKontakt {
  id: number;
  name: string;
  ort: string;
  // Call Signature
  //(print: string): string;
 }






}
