pragma solidity ^0.6.0;
struct User { // 0.6.0后可以在合约外面定义结构体了,主要用于共享一些数据
uint a;
}
// 0.6.0开始数组的length属性变为了只读属性,如果需要减少数组长度,需要使用pop()函数
contract MyContract {
uint[] num = [1, 2, 3];
uint[3] num1 = [1, 2, 3];
function f() public {
// num1.length -= 1;
// num.length -= 1;
num.pop();
}
function get() view public returns(uint[] memory) {
return num;
}
}
// abstract, virtual, override
abstract contract Parent {
uint[] num;
function foo() external virtual; // 若函数没有实现,现在需要在合约前面加上abstract关键字,并且需要使用virtual修饰对应的函数
}
contract Son is Parent {
function foo() external override { // 现在子合约的继承需要重写时,需要使用override关键字修饰
num.push(21);
}
}
contract Parent1 {
uint a;
}
contract Son1 is Parent1{
// uint a; // 现在父合约已经定义的关键字,在子合约中无法再次定义
function f() view public returns(uint) {
return a;
}
}
// 0.6.0后fallback的共能被拆分为了fallback和receive函数,两个函数都要使用external进行修饰
contract MyContract1 {
receive() external payable{ // receive函数必须使用payable进行修饰,用于处理接收以太
}
fallback() external { // [payable] // fallback的payable是可选项,主要处理不存在合约函数的调用
}
address a = 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4;
address payable b = payable(a); // 可以直接将address类型转换为address payable类型了
}
solidity0.6.0特性
最新推荐文章于 2024-08-07 17:20:23 发布