(1)同其他高级语言类似,Solidity语言中也有this关键字。但是,在构造函数中调用this会出现问题,原因是因为在构造函数中,this的对象尚未生成所致。
注意,上图中,this关键字下添加了波浪线,指出:
(2)自0.4.22颁布起,废除function+合约名称来定义构造函数,而采用“constructor(...) { ... }”来声明构造函数。
以前版本中是这样定义构造函数的:
contract TestCon {
function TestCon public {
//......
}
}
自0.4.22颁布起,新的构造函数定义使用constructor关键字,如下:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyContract {
uint public myVariable;
constructor(uint _myVariable) {
myVariable = _myVariable;
}
}
同时还应当注意:[0]当该合约被部署到以太坊网络时,构造函数将自动执行;[1]合约只能有一个构造函数;[2]必须位于合约中的第一个函数位置;[3]在Solidity 0.8.0及以上版本中,必须显式声明构造函数,并在函数签名前面加上 constructor
关键字。[4]构造函数的定义必须始终提供实现函数体。而且请注意,指定internal或public可见性已经不支持使用。
参考
https://blog.51cto.com/u_15067225/2901016
https://blog.csdn.net/zyq55917/article/details/127490001