Siblearn Academy siblearn academy

Visibility

توابع و متغیرهای حالت باید اعلام کنند که آیا توسط قراردادهای دیگر قابل دسترسی هستند یا خیر.

توابع را می توان به عنوان اعلام کرد

  • عمومی - هر قرارداد و حسابی می تواند تماس بگیرد
  • خصوصی - فقط در داخل قراردادی که عملکرد را تعریف می کند
  • درونی؛ داخلی- فقط درون قراردادی که ارث می برد درونی؛ داخلی تابع
  • خارجی - فقط قراردادها و حساب های دیگر می توانند تماس بگیرند

متغیرهای حالت را می توان به صورت اعلام کرد عمومی، خصوصی، یا درونی؛ داخلی اما نه خارجی.


// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

contract Base {
    // Private function can only be called
    // - inside this contract
    // Contracts that inherit this contract cannot call this function.
    function privateFunc() private pure returns (string memory) {
        return "private function called";
    }

    function testPrivateFunc() public pure returns (string memory) {
        return privateFunc();
    }

    // Internal function can be called
    // - inside this contract
    // - inside contracts that inherit this contract
    function internalFunc() internal pure returns (string memory) {
        return "internal function called";
    }

    function testInternalFunc() public pure virtual returns (string memory) {
        return internalFunc();
    }

    // Public functions can be called
    // - inside this contract
    // - inside contracts that inherit this contract
    // - by other contracts and accounts
    function publicFunc() public pure returns (string memory) {
        return "public function called";
    }

    // External functions can only be called
    // - by other contracts and accounts
    function externalFunc() external pure returns (string memory) {
        return "external function called";
    }

    // This function will not compile since we're trying to call
    // an external function here.
    // function testExternalFunc() public pure returns (string memory) {
    //     return externalFunc();
    // }

    // State variables
    string private privateVar = "my private variable";
    string internal internalVar = "my internal variable";
    string public publicVar = "my public variable";
    // State variables cannot be external so this code won't compile.
    // string external externalVar = "my external variable";
}

contract Child is Base {
    // Inherited contracts do not have access to private functions
    // and state variables.
    // function testPrivateFunc() public pure returns (string memory) {
    //     return privateFunc();
    // }

    // Internal function can be called inside child contracts.
    function testInternalFunc() public pure override returns (string memory) {
        return internalFunc();
    }
}

روی محیط توسعه ی Remix امتحان بکنید

  • Visibility.sol
  • بازگشت به لیست