Inheritance

Solidity 中繼承合約的建構子

  • September 23, 2019

鑑於:

contract A {

   address owner;
   function A() { owner = msg.sender; }

}

contract B is A {

   string greeting;
   function B(string _greeting) { greeting = _greeting; }

}
  1. 當我部署我的合約時,我想確保它owner已被初始化。我是否需要在 的建構子中呼叫父建構子來像這樣B初始化值:,或者我可以保持原樣(它會自動初始化 的值,通過自動呼叫?owner``A``function B (string _greeting) A(msg.sender) { greeting = _greeting; }``A``A()
  2. 是否B需要自己的地址,還是只使用A’s 作為自己的地址?

不,您不需要自己呼叫父建構子,除非您需要將參數傳遞給它(此處有詳細範例)。

就地址而言,上面指定的solidity 文件基本上就像一個類規範。您將決定在實例化時實際獲得地址的內容。 最有可能的是,當您以某種方式實例化合約 B 時,您將只在一個地址上創建一個合約,其中包含所有繼承功能的程式碼。如果您還單獨實例化了 A 的一個完全獨立的副本,那麼您將擁有 A 的單獨地址的唯一方法。

或者,如果您指的是“所有者”地址變數,它已經在基本建構子中設置並存在於合約儲存中。您不需要再次定義變數:您可以根據需要簡單地使用它。

1.是否需要在B的建構子中呼叫父建構子來初始化A中的值所有者

除非您將參數傳遞給建構子,否則您不需要顯式呼叫它。owner = msg.sender部署合約時將評估分配

2. B 需要自己的地址,還是只使用 A 作為自己的地址?

在 Solidity 中使用繼承會將您的程式碼捆綁在一起,並將其部署在單個合約下

來自solidity docs

當一個合約繼承自多個合約時,區塊鏈上只會創建一個合約,所有基礎合約的程式碼都會復製到創建的合約中。

引用自:https://ethereum.stackexchange.com/questions/18007