2017-06-16 3 views
2

Wie lautet die Syntax zum vollständigen Überschreiben eines übergeordneten Konstruktors?Powershell-Überschreibung des übergeordneten Klassenkonstruktors

Im folgenden Code erstellen ich eine Animals-Klasse und eine Dogs-Klasse, die von der Animals-Klasse erbt. Die Dogs-Klasse hat ihren eigenen Konstruktor, aber anstatt den Animals-Konstruktor zu ersetzen, werden sowohl der Animals-Konstruktor als auch der Dogs-Konstruktor ausgeführt, wenn die Klasse instanziiert wird.

class Animals { 
    [System.Collections.ArrayList]$animalList = @() 
    Animals() { 
     $this.animalList.add("moose") 
     $this.animalList.add("elephant") 
     $this.animalList.add("buffalo") 
    } 
    showAnimals() { 
     foreach($animal in $this.animalList) { 
      Write-Host $animal 
     } 
    } 
} 
class Dogs : Animals { 
    Dogs() { 
     $this.animalList.add("Doberman") 
     $this.animalList.add("Golden Retriever") 
    } 
} 

$someAnimals = New-Object Animals 
$someDogs = New-Object Dogs 
Write-Host "The animals list:" 
$someAnimals.showAnimals() 
Write-Host "" 
Write-Host "The dogs list:" 
$someDogs.showAnimals() 

Daraus ergibt sich die folgende:

The animals list: 
moose 
elephant 
buffalo 

The dogs list: 
moose 
elephant 
buffalo 
Doberman 
Golden Retriever 

Antwort

2

Sie eine Methode in Ihrem Konstruktor verwenden kann und diese Methode in abgeleiteten Klasse überschreiben. So:

class Animals { 
    [System.Collections.ArrayList]$animalList = @() 
    Animals() 
    { 
     $this.addAnimals() 
    } 

    [void] addAnimals() 
    { 
     $this.animalList.add("moose") 
     $this.animalList.add("elephant") 
     $this.animalList.add("buffalo") 
    } 

    [void] showAnimals() { 
     foreach($animal in $this.animalList) { 
      Write-Host $animal 
     } 
    } 
} 

class Dogs : Animals { 

    [void] addAnimals() 
    { 
     $this.animalList.add("Doberman") 
     $this.animalList.add("Golden Retriever") 
    } 
} 


Write-Host "" 
Write-Host "" 

$someAnimals = New-Object Animals 
Write-Host "The animals list:" 
$someAnimals.showAnimals() 
Write-Host "" 

$someDogs = New-Object Dogs 
Write-Host "The dogs list:" 
$someDogs.showAnimals() 
Verwandte Themen