Tutorial básico de Solidity: herencia de contratos y reescritura de métodos

Tutorial básico de Solidity: herencia de contratos y reescritura de métodos

contrato de herencia

herencia de contrato usando ispalabras clave

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
	...

    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }
    ...
}

anulación del método

La premisa de la anulación de métodos es que el contrato actual hereda otros contratos, y un método en el otro contrato que debe anularse se marca como virtual. Por ejemplo , el método en la implementación del contrato de la siguiente @openzippelin/contractsbiblioteca .ERC721balanceOf

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
	...

    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }
    ...
}

En el nuevo contrato, podemos heredar directamente el contrato anterior y reescribirlo balanceOf. Tenga en cuenta que la nueva función debe overridemarcarse.

contract TarotCard is ERC721 {
	...
	function balanceOf(address owner) public view override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return 0;
    }
    ...
}

Hay dos puntos a los que hay que prestar especial atención:

  1. La función anulada debe marcarse como virtual, lo que indica que el heredero del contrato actual puede anular la función.
  2. Anular las funciones de otras personas debe marcarse como override, lo que indica que he reescrito la función del contrato principal.

Puede haber dudas, ¿por qué balanceOfhay que añadir también el primer contrato override? Debido a que el primer contrato hereda la IERC721interfaz, todas las funciones en la interfaz tienen virtualtipos predeterminados.

Supongo que te gusta

Origin blog.csdn.net/u012331525/article/details/122859969
Recomendado
Clasificación