构造函数是使用construct
关键字声明的特殊函数,用于初始化合约的状态变量。合约中构造函数是可选的,可以省略。
构造函数有以下重要特性:
- 一个合约只能有一个构造函数。
- 构造函数在创建合约时执行一次,用于初始化合约状态。
- 在执行构造函数之后,合约最终代码被部署到区块链。合约最终代码包括公共函数和可通过公共函数访问的代码。构造函数代码或仅由构造函数使用的任何内部方法不包括在最终代码中。
- 构造函数可以是公共的,也可以是内部的。
- 内部构造函数将合约标记为抽象合约。
- 如果没有定义构造函数,则使用默认构造函数。
pragma solidity ^0.5.0;
contract Test {
constructor() public {}
}
- 如果基合约具有带参数的构造函数,则每个派生/继承的合约也都必须包含参数。
- 可以使用下面的方法直接初始化基构造函数
pragma solidity ^0.5.0;
contract Base {
uint data;
constructor(uint _data) public {
data = _data;
}
}
contract Derived is Base (5) {
constructor() public {}
}
- 可以使用以下方法间接初始化基构造函数
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 {}
}
- 不允许直接或间接地初始化基合约构造函数。
- 如果派生合约没有将参数传递给基合约构造函数,则派生合约将成为抽象合约。