强制转换为接口和合同实例之间有区别吗?

Is there a difference between casting to Interface and to a contract instance?

在 solidity 中,大多数智能合约将外部合约调用转换为接口(IERC20 与 ERC20)。两者在选角上有什么区别吗?

例如,如果我写

IERC20 Token = IERC20(tokenContractAddress);

在功能上有什么区别吗

ERC20 Token = ERC20(tokenContractAddress);?

只是想知道在 gas 成本、兼容性问题等方面是否有需要考虑的因素。谢谢!

如果您只想访问这些功能,您可以使用其中任何一个。但是在接口中你不能有状态变量所以如果你需要一些状态变量你转换为契约。

此外,接口不能继承其他契约或接口。也许合同是从 contractB 继承的,并且在您的合同中您想访问 contractB。