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.