Skip to content

Latest commit

 

History

History
32 lines (21 loc) · 1.24 KB

24 继承状态变量的屏蔽.md

File metadata and controls

32 lines (21 loc) · 1.24 KB

继承状态变量的屏蔽(Shadowing Inherited State Variables)

当一个合约继承了另一个合约时,如果它重复定义了继承合约中已有的状态变量,则新合约中的变量将覆盖继承合约中的变量。这种现象被称为“状态变量的屏蔽”。

以下示例演示了如何通过继承来创建一个新合约,并在新合约中屏蔽继承合约中的状态变量。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;

contract A {
    uint256 public myUint = 1;
}

// B 继承自 A
contract B is A {
    uint256 public myUint = 2;
}
  • A 合约定义了一个名为 myUint 的状态变量,并将其设置为 1
  • B 合约继承了 A 合约,并重新定义了名为 myUint 的状态变量,并将其设置为 2

使用 Remix 部署 B 合约并检索 myUint 的值。

shadowing-remix

我们可以看到,B 合约中重复定义的 myUint 变量的值为 2,而继承自 A 合约的变量值仍为 1

注意

  • 在新合约中屏蔽继承合约中的状态变量可能会导致意外的行为。建议在编写代码时避免这种情况。