Solidność - konstruktorzy
Konstruktor to specjalna funkcja zadeklarowana przy użyciu constructorsłowo kluczowe. Jest to funkcja opcjonalna i służy do inicjalizacji zmiennych stanu kontraktu. Oto kluczowe cechy konstruktora.
Kontrakt może mieć tylko jednego konstruktora.
Kod konstruktora jest wykonywany raz podczas tworzenia kontraktu i służy do inicjowania stanu kontraktu.
Po wykonaniu kodu konstruktora ostateczny kod jest wdrażany w łańcuchu bloków. Ten kod obejmuje funkcje publiczne i kod dostępny za pośrednictwem funkcji publicznych. Kod konstruktora ani żadna metoda wewnętrzna używana tylko przez konstruktora nie są uwzględniane w końcowym kodzie.
Konstruktor może być publiczny lub wewnętrzny.
Konstruktor wewnętrzny oznacza kontrakt jako abstrakcyjny.
W przypadku, gdy nie zdefiniowano konstruktora, w kontrakcie znajduje się domyślny konstruktor.
pragma solidity ^0.5.0;
contract Test {
constructor() public {}
}
W przypadku, gdy kontrakt bazowy ma konstruktora z argumentami, każdy kontrakt pochodny musi je przekazać.
Konstruktor bazowy można zainicjować bezpośrednio w następujący sposób -
pragma solidity ^0.5.0;
contract Base {
uint data;
constructor(uint _data) public {
data = _data;
}
}
contract Derived is Base (5) {
constructor() public {}
}
Konstruktor bazowy można zainicjować pośrednio w następujący sposób -
pragma solidity ^0.5.0;
contract Base {
uint data;
constructor(uint _data) public {
data = _data;
}
}
contract Derived is Base {
constructor(uint _info) Base(_info * _info) public {}
}
Bezpośrednie i pośrednie sposoby inicjowania konstruktora kontraktu podstawowego są niedozwolone.
Jeśli kontrakt pochodny nie przekazuje argumentów do konstruktora kontraktu podstawowego, kontrakt pochodny stanie się abstrakcyjny.