Languages
[Edit]
DE

TypeScript - Überladung eines Konstruktors / mehrerer Konstruktoren

3 points
Created by:
Nikki
1659

In diesem Artikel wird gezeigt, wie der Konstruktor in TypeScript ├╝berladen wird. Im TypeScript-Konstruktor sieht das ├ťberladen anders aus, als in C++, Java, oder C#. Die Hauptidee des Konstruktor├╝berladens besteht darin, dass ein gemeinsamer Konstruktor erstellt wird. Dieser gemeinsamen Konstruktor ├╝berpr├╝ft, welche Art von Parametern zum Erstellen des Objekts ├╝bergeben wird, und sp├Ąter eine Logik f├╝r den richtigen Fall erstellt. N├╝tzlich ist es, Konstruktordefinitionen hinzuzuf├╝gen, damit andere Programmierer wissen, wie man Klassen ruchtig verwenden soll.┬á

Einfache ├ťbersicht:

class MyClassName {

    public constructor(a : number);
    public constructor(a : number, b : number);
    public constructor(array : Array<number>);

    public constructor(...args : Array<any>) { // gemeinsamer Konstruktor

        // Argumente ├╝berpr├╝fen und das richtige Szenario ausf├╝hren
       // oder neuen Fehler ausl├Âsen ('Konstruktor wird nicht unterst├╝tzt!');
    }
}

// MyClassName wird hier verwendet...

Unten findet man ein praktisches Beispiel:

1. Mehrere Konstruktoren - ein praktisches Beispiel

Das ├ťberladen von Konstruktoren erfordert ein bisschen Logik zu schreiben, um festzustellen, welcher Konstruktor verwendet wurde.┬ápublic constructor(...args : Array<any>) entspricht einer allgemeinen Logik, bei der abh├Ąngig von den verwendeten Argumenten der Sonderfall der Objekterstellung verwendet werden soll.┬á┬á

class Point {
    private coordinates : Array<number>;

    public constructor(x : number, y : number);
    public constructor(x : number, y : number, z : number);
    public constructor(x : number, y : number, z : number, ...coordinates : Array<number>);
    public constructor(coordinates : Array<number>);

    public constructor(...args : Array<any>) { // gemeinsamer logischer Konstruktor
        if(args.length == 0)
            throw new Error('Arguments are not defined.');
    
        let arg = args[0];

        if(Array.isArray(arg)) {
            if(arg.length < 2)
                throw new Error('Minimum number of dimmensions is 2.');
        
            this.coordinates = arg;
        } else
            this.coordinates = args;
    }

    public getCoordinate(dimmension : number) : number {
        return this.coordinates[dimmension];
    }

    public toString() : string {
        let result = '{';

        if(this.coordinates.length > 0) {
            result += ' ' + this.coordinates[0];

            for(let i = 1; i < this.coordinates.length; ++i)
                result += ', ' + this.coordinates[i];
        }

        return result + ' }';
    }
}

let a = new Point(1, 2);
let b = new Point(1, 2, 3);
let c = new Point(1, 2, 3, 4);
let d = new Point([1, 2]);
let e = new Point([1, 2, 3]);
let f = new Point([1, 2, 3, 4]);

console.log(a.toString());
console.log(b.toString());
console.log(c.toString());
console.log(d.toString());
console.log(e.toString());
console.log(f.toString());

Ausgabe:

{ 1, 2 }
{ 1, 2, 3 }
{ 1, 2, 3, 4 }
{ 1, 2 }
{ 1, 2, 3 }
{ 1, 2, 3, 4 }

Hinweis: Eine gro├če Anzahl von ├ťberlastungen kann zu einer gro├čen Anzahl von Fehlern f├╝hren. Daher ist es besser, diese Technik zu vermeiden.┬á

 

2. Literaturverzeichnis

  1. Methods Overloading - Microsoft Docs
Hey ­čĹő
Would you like to know what we do?
  • Dirask is a friendly IT community for learners, professionals and hobbyists to share their knowledge and help each other in extraordinary easy way.
  • We welcome everyone,
    no matter what the experience,
    no matter how basic the question is,
    this community will help you.