欢迎光临
我们一直在努力

solidity的高阶语法2

1.抽象合约

抽象合约是一种包含至少一个函数但没有任何实现的合约。 这样的合同被用作基础合同。 通常,抽象合约包含已实现的功能和抽象功能。 派生合约将实现抽象函数,并在需要时使用现有函数。

如果派生合约未实现抽象函数,则该派生合约将被标记为抽象。

示例

尝试以下代码来了解抽象合约在 Solidity 中的工作原理。

pragma solidity ^0.5.0;

contract Calculator {
function getResult() public view returns(uint);
}
contract Test is Calculator {
function getResult() public view returns(uint) {
uint a = 1;
uint b = 2;
uint result = a + b;
return result;
}
}

2.接口

接口类似于抽象契约,使用interface关键字创建。 以下是界面的主要特征。

  • 接口不能有任何需要实现的功能。

  • 接口的函数只能是外部类型。

  • 接口不能有构造函数。

  • 接口不能有状态变量。

  • 接口可以有枚举、结构体,可以使用接口名称点表示法进行访问。

示例

尝试以下代码来了解 Solidity 中的界面如何工作。

pragma solidity ^0.5.0;

interface Calculator {
function getResult() external view returns(uint);
}
contract Test is Calculator {
constructor() public {}
function getResult() external view returns(uint){
uint a = 1;
uint b = 2;
uint result = a + b;
return result;
}
}

3.库

库与合约类似,但主要用于重用。 库包含其他合约可以调用的函数。 Solidity 对库的使用有一定的限制。 以下是 Solidity 库的主要特征。

  • 库函数如果不修改状态就可以直接调用。 这意味着纯函数或视图函数只能从库外部调用。

  • 库无法被销毁,因为它被假定为无状态。

  • 库不能有状态变量。

  • 库不能继承任何元素。

  • 库不能被继承。

示例

尝试以下代码来了解库在 Solidity 中的工作原理。

pragma solidity ^0.5.0;

library Search {
function indexOf(uint[] storage self, uint value) public view returns (uint) {
for (uint i = 0; i < self.length; i++) if (self[i] == value) return i;
return uint(-1);
}
}
contract Test {
uint[] data;
constructor() public {
data.push(1);
data.push(2);
data.push(3);
data.push(4);
data.push(5);
}
function isValuePresent() external view returns(uint){
uint value = 4;

//search if value is present in the array using Library function
uint index = Search.indexOf(data, value);
return index;
}
}

赞(0)
未经允许不得转载:171主机测评 » solidity的高阶语法2
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址