📜  Solidity-合同

📅  最后修改于: 2020-11-04 04:28:35             🧑  作者: Mango


 

实体合同类似于C++中的类。合同具有以下属性。

  • 构造函数-用构造函数关键字声明的特殊函数,它将对每个合约执行一次,并在创建合约时调用。
  • 状态变量-每个合同的变量,用于存储合同的状态。
  • 功能-每个合约的功能,可以修改状态变量以更改合约的状态。

可见性量词

以下是合同功能/状态变量的各种可见性量词。

  • 外部-外部功能应由其他合同调用。它们不能用于内部呼叫。要在合同内调用外部函数,需要this.function_name()调用。状态变量不能标记为外部变量。
  • public-公共功能/变量可以在内部和外部使用。对于公共状态变量,Solidity自动创建一个getter函数。
  • 内部-内部函数/变量只能在内部使用或由衍生合同使用。
  • 私有-私有函数/变量只能在内部使用,甚至不能通过派生合同使用。

pragma solidity ^0.5.0;

contract C {
   //private state variable
   uint private data;
   
   //public state variable
   uint public info;

   //constructor
   constructor() public {
      info = 10;
   }
   //private function
   function increment(uint a) private pure returns(uint) { return a + 1; }
   
   //public function
   function updateData(uint a) public { data = a; }
   function getData() public view returns(uint) { return data; }
   function compute(uint a, uint b) internal pure returns (uint) { return a + b; }
}
//External Contract
contract D {
   function readData() public returns(uint) {
      C c = new C();
      c.updateData(7);         
      return c.getData();
   }
}
//Derived Contract
contract E is C {
   uint private result;
   C private c;
   
   constructor() public {
      c = new C();
   }  
   function getComputedResult() public {      
      result = compute(3, 5); 
   }
   function getResult() public view returns(uint) { return result; }
   function getData() public view returns(uint) { return c.info(); }
}

使用Solidity First Application一章中提供的步骤运行上述程序。运行各种合同方法。对于E.getComputedResult()然后是E.getResult()显示-

输出

0: uint256: 8