Inheritance
Solidity 中繼承合約的建構子
鑑於:
contract A { address owner; function A() { owner = msg.sender; } } contract B is A { string greeting; function B(string _greeting) { greeting = _greeting; } }
- 當我部署我的合約時,我想確保它
owner
已被初始化。我是否需要在 的建構子中呼叫父建構子來像這樣B
初始化值:,或者我可以保持原樣(它會自動初始化 的值,通過自動呼叫?owner``A``function B (string _greeting) A(msg.sender) { greeting = _greeting; }``A``A()
- 是否
B
需要自己的地址,還是只使用A
’s 作為自己的地址?
不,您不需要自己呼叫父建構子,除非您需要將參數傳遞給它(此處有詳細範例)。
就地址而言,上面指定的solidity 文件基本上就像一個類規範。您將決定在實例化時實際獲得地址的內容。 最有可能的是,當您以某種方式實例化合約 B 時,您將只在一個地址上創建一個合約,其中包含所有繼承功能的程式碼。如果您還單獨實例化了 A 的一個完全獨立的副本,那麼您將擁有 A 的單獨地址的唯一方法。
或者,如果您指的是“所有者”地址變數,它已經在基本建構子中設置並存在於合約儲存中。您不需要再次定義變數:您可以根據需要簡單地使用它。
1.是否需要在B的建構子中呼叫父建構子來初始化A中的值所有者
除非您將參數傳遞給建構子,否則您不需要顯式呼叫它。
owner = msg.sender
部署合約時將評估分配2. B 需要自己的地址,還是只使用 A 作為自己的地址?
在 Solidity 中使用繼承會將您的程式碼捆綁在一起,並將其部署在單個合約下
當一個合約繼承自多個合約時,區塊鏈上只會創建一個合約,所有基礎合約的程式碼都會復製到創建的合約中。