Solidity中this和address(this)的区别

Solidity中this和address(this)的区别

Solidity是一种高级编程语言,它是为实现智能契约而设计的。Solidity是一种处于初始阶段并不断进化的语言。自《公约》实施以来,已使许多具有破坏性的变化变得稳固。当前版本的稳定性是0.8.13,到目前为止已经有4次打破稳定性的变化。

一些突破性的变化包括:

1. Solidityv0.5.0打破变化
2. Solidityv0.6.0断裂变化
3.Solidityv0.7.0断裂变化
4. Solidityv0.8.0断裂变化

突破性的更改为已有的方法带来了不同的方法,并进行了增强。 thisaddress(this) 是相同的东西,由于这些重大的变化而有不同的术语。

this 当可靠性版本是时,这个术语是否用于智能合约 below 0.5.0 .

address(this) 这个术语用在 latest versions 其中的稳固性指的是智能合约。

让我们使用Remix IDE上的一个智能合约示例来理解这两个术语之间的区别。

1. 使用此智能合约(Solidity版本<0.5.0):

以下是实施上述方法的可行性方案:

// Solidity program to implement 
// the above approach
// SPDX-License-Identifier: GPL-3.0
pragma solidity <0.5.0;
  
contract old_version
{
    address public myAddress_in_old_version = this;
    uint public myBalance_in_old_verison = this.balance;
      
}

输出:

Solidity中this和address(this)的区别

您可能会得到一个不同的合同地址,但可以从上面的输出中观察到,该关键字使用balance函数给出了合同地址和合同余额。

在0.5.0及以上版本中使用此关键字:

在0.5.0及以上版本中尝试使用此关键字时会显示以下错误。

Solidity中this和address(this)的区别

可以观察到,编译器正在提供使用address(this)来访问address成员的建议。

2. 智能合约使用address(this):

以下是实施上述方法的可行性方案:

// Solidity program to implement 
// the above approach
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.5.0 <0.9.0;
  
contract new_version
{
    address public myAddress_in_new_version_ = address(this);
    uint public myBalance_in_new_verison = address(this).balance;
}

输出:

Solidity中this和address(this)的区别

你可能会得到一个不同的合同地址,但可以看到,address(this)关键字给了我们合同地址和合同余额使用余额函数。

从上面的例子可以得出结论,这个和address(this)没有区别,只是在Solidity上有版本变化。

S. No. address(this) this
1. 在Solidity版本>=5.0.0时使用 用于Solidity版本<=5.0.0
2. 在Breaking Change 0.5.0引入 它最初使用,直到打破变化0.5.0

0.5.0的大的变化也可以在Solidity文档中找到:

Solidity中this和address(this)的区别

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程