diff options
author | Chris Ward <chris.ward@ethereum.org> | 2019-01-07 22:45:39 +0800 |
---|---|---|
committer | Chris Ward <chris.ward@ethereum.org> | 2019-01-08 01:20:57 +0800 |
commit | f69af050cb54710d527a2601a376da11c9444755 (patch) | |
tree | 306fecf9ffadded585f14917ea418ff96c806acd | |
parent | a2926cd9dcdddf681b87471cef8ed0c83c3aefd3 (diff) | |
download | dexon-solidity-f69af050cb54710d527a2601a376da11c9444755.tar dexon-solidity-f69af050cb54710d527a2601a376da11c9444755.tar.gz dexon-solidity-f69af050cb54710d527a2601a376da11c9444755.tar.bz2 dexon-solidity-f69af050cb54710d527a2601a376da11c9444755.tar.lz dexon-solidity-f69af050cb54710d527a2601a376da11c9444755.tar.xz dexon-solidity-f69af050cb54710d527a2601a376da11c9444755.tar.zst dexon-solidity-f69af050cb54710d527a2601a376da11c9444755.zip |
Split Abstract Contracts docs to new file
-rw-r--r-- | docs/contracts.rst | 45 | ||||
-rw-r--r-- | docs/contracts/abstract-contracts.rst | 43 |
2 files changed, 44 insertions, 44 deletions
diff --git a/docs/contracts.rst b/docs/contracts.rst index 3c91b2f8..214a876f 100644 --- a/docs/contracts.rst +++ b/docs/contracts.rst @@ -991,50 +991,7 @@ When the inheritance results in a contract with a function and a modifier of the This error is produced also by an event and a modifier of the same name, and a function and an event of the same name. As an exception, a state variable getter can override a public function. -.. index:: ! contract;abstract, ! abstract contract - -.. _abstract-contract: - -****************** -Abstract Contracts -****************** - -Contracts are marked as abstract when at least one of their functions lacks an implementation as in the following example (note that the function declaration header is terminated by ``;``):: - - pragma solidity >=0.4.0 <0.6.0; - - contract Feline { - function utterance() public returns (bytes32); - } - -Such contracts cannot be compiled (even if they contain implemented functions alongside non-implemented functions), but they can be used as base contracts:: - - pragma solidity >=0.4.0 <0.6.0; - - contract Feline { - function utterance() public returns (bytes32); - } - - contract Cat is Feline { - function utterance() public returns (bytes32) { return "miaow"; } - } - -If a contract inherits from an abstract contract and does not implement all non-implemented functions by overriding, it will itself be abstract. - -Note that a function without implementation is different from a :ref:`Function Type <function_types>` even though their syntax looks very similar. - -Example of function without implementation (a function declaration):: - - function foo(address) external returns (address); - -Example of a Function Type (a variable declaration, where the variable is of type ``function``):: - - function(address) external returns (address) foo; - -Abstract contracts decouple the definition of a contract from its implementation providing better extensibility and self-documentation and -facilitating patterns like the `Template method <https://en.wikipedia.org/wiki/Template_method_pattern>`_ and removing code duplication. -Abstract contracts are useful in the same way that defining methods in an interface is useful. It is a way for the designer of the abstract contract to say "any child of mine must implement this method". - +.. include:: contracts/abstract-contracts.rst .. index:: ! contract;interface, ! interface contract diff --git a/docs/contracts/abstract-contracts.rst b/docs/contracts/abstract-contracts.rst new file mode 100644 index 00000000..87340733 --- /dev/null +++ b/docs/contracts/abstract-contracts.rst @@ -0,0 +1,43 @@ +.. index:: ! contract;abstract, ! abstract contract + +.. _abstract-contract: + +****************** +Abstract Contracts +****************** + +Contracts are marked as abstract when at least one of their functions lacks an implementation as in the following example (note that the function declaration header is terminated by ``;``):: + + pragma solidity >=0.4.0 <0.6.0; + + contract Feline { + function utterance() public returns (bytes32); + } + +Such contracts cannot be compiled (even if they contain implemented functions alongside non-implemented functions), but they can be used as base contracts:: + + pragma solidity >=0.4.0 <0.6.0; + + contract Feline { + function utterance() public returns (bytes32); + } + + contract Cat is Feline { + function utterance() public returns (bytes32) { return "miaow"; } + } + +If a contract inherits from an abstract contract and does not implement all non-implemented functions by overriding, it will itself be abstract. + +Note that a function without implementation is different from a :ref:`Function Type <function_types>` even though their syntax looks very similar. + +Example of function without implementation (a function declaration):: + + function foo(address) external returns (address); + +Example of a Function Type (a variable declaration, where the variable is of type ``function``):: + + function(address) external returns (address) foo; + +Abstract contracts decouple the definition of a contract from its implementation providing better extensibility and self-documentation and +facilitating patterns like the `Template method <https://en.wikipedia.org/wiki/Template_method_pattern>`_ and removing code duplication. +Abstract contracts are useful in the same way that defining methods in an interface is useful. It is a way for the designer of the abstract contract to say "any child of mine must implement this method". |