📜  构造函数的可见性被忽略.如果您希望合同不可部署,则使其“抽象”就足够了. (1)

📅  最后修改于: 2023-12-03 15:10:42.569000             🧑  作者: Mango

构造函数可见性的忽略及合同抽象性

在Solidity中,构造函数是在合同创建时执行的特殊函数。 只有在使用new关键字创建合同时,才会调用构造函数。 与其他函数不同,不需要显式调用构造函数。 构造函数的名称与合同的名称相同,并且没有返回类型。

合同构造函数可以是public,private或internal。 然而,与其他函数不同,它们的可见性实际上被忽略。 Solidity编译器将会在合同部署时忽略构造函数的可见性并始终将其视为公共函数。 这意味着,无论您将构造函数声明为public、private、internal或默认可见性,它都可以从外部调用。

如果您想要确保合同不被部署,可以将其定义为abstract。 抽象合同不能被实例化,但是可以作为基类或接口使用。 与接口不同,抽象合同可以包含函数的实现。 因此,抽象合同可以作为用于编写扩展合同的模板。

以下是一个简单的抽象合同示例:

// 抽象合同示例
abstract contract MyAbstractContract {
  function myAbstractFunction() public virtual;
}

// 基于抽象合同的实现示例
contract MyContract is MyAbstractContract {
  function myAbstractFunction() public override {
    // 在这里添加具体实现代码
  }
}

在这个例子中,我们定义了一个抽象合同MyAbstractContract,它只包含一个公共虚函数myAbstractFunction()。然后,我们创建了一个基于MyAbstractContract的实现合同MyContract,并覆盖了抽象函数myAbstractFunction()。 这样,我们就可以编写具体的实现代码,并使用MyContract进行部署。

总之,在Solidity合同中,构造函数的可见性被忽略。 如果您想要确保合同不能被实例化,请将其定义为抽象。