solidity 中新变量的接口与合约类型
Inferface vs contract type for new variable in solidity
假设一个合约C
继承了一个接口I
。 C c = new C()
和 I c = new C()
有什么区别?在这两种情况下 c
都指向新部署的 C
实例,不是吗? (我在找here。)
更一般地说,I c;
和C c;
有什么区别?
假设合约实现了一些扩展接口的方法,您也可以使用 C
类型变量调用这些(扩展的)方法。
pragma solidity ^0.8;
interface I {
function foo() external;
}
contract C is I {
function foo() override external {
// implements the `foo()` function of the `I` interface
}
function otherFunction() external {
}
}
contract Factory {
function deploy() external {
// the `I` type variable `i` can only invoke the `foo()` function
I i = new C();
i.foo();
// the `C` type variable `c` can invoke the `otherFunction()` as well
C c = new C();
c.foo();
c.otherFunction();
}
}
如果契约和接口都定义了同一组方法(例如从示例中删除 otherFunction()
),那么两个片段 - I i = new C();
和 C c = new C();
- 有效地具有相同的功能。
假设一个合约C
继承了一个接口I
。 C c = new C()
和 I c = new C()
有什么区别?在这两种情况下 c
都指向新部署的 C
实例,不是吗? (我在找here。)
更一般地说,I c;
和C c;
有什么区别?
假设合约实现了一些扩展接口的方法,您也可以使用 C
类型变量调用这些(扩展的)方法。
pragma solidity ^0.8;
interface I {
function foo() external;
}
contract C is I {
function foo() override external {
// implements the `foo()` function of the `I` interface
}
function otherFunction() external {
}
}
contract Factory {
function deploy() external {
// the `I` type variable `i` can only invoke the `foo()` function
I i = new C();
i.foo();
// the `C` type variable `c` can invoke the `otherFunction()` as well
C c = new C();
c.foo();
c.otherFunction();
}
}
如果契约和接口都定义了同一组方法(例如从示例中删除 otherFunction()
),那么两个片段 - I i = new C();
和 C c = new C();
- 有效地具有相同的功能。