属性的访问权限

属性:状态变量

属性的权限有三种:public internal private

pragma solidity ^0.4.4;/*
属性的权限有三种:public internal private
*/
contract Person {uint _age;//默认的是internaluint internal _weight;uint private _money;uint public _sex;}

效果如下:

说明:属性默认类型为“internal”,“internal”和“private”类型的属性都不能被外部访问,当属性的类型为“public”类型时,会默认自动生成一个和属性名相同并且返回值就是当前属性的get函数。

function _sex() constant returns (uint) {return 1;}

自己写的get函数会覆盖掉public类型的属性自动生成的get函数,_sex值变为1,而不是0。

方法/行为访问权限:合约里的函数

方法的权限有三种:public internal private

pragma solidity ^0.4.4;contract Person {function age() constant returns (uint) {return 18;}function sex() constant public returns (uint) {return 1;}function weight() constant private returns (uint) {return 120;}function height() constant internal returns (uint) {return 170;}}

效果如下:

说明:函数的权限默认为“public”,“internal”和“private”类型的属性都不能被外部访问。

属性和方法

pragma solidity ^0.4.4;contract Person {uint _age;//默认的是internaluint internal _weight;uint private _money;uint public _sex;function test1() constant returns (uint) {this._sex; //public的属性可以指针调用return _age;}function test2() constant public returns (uint) {return _weight;}function test3() constant internal returns (uint) {return _money;}function test4() constant private returns (uint) {return _sex;}function testPublic() constant returns (uint) {return this.test1(); //指针访问}function testInternal() constant returns (uint) {return test3(); //直接访问}function testPrivate() constant returns (uint) {return test4(); //直接访问}
}

效果如下:

说明:属性默认的权限为internal,只有public类型的属性才可以供外部访问,internal和private类型的属性只能在合约内部使用。

函数的默认权限是public类型,public类型的函数可供外部访问,而internal和private类型的函数不能通过指针(this)进行访问,哪怕是在内部通过调用this访问都会报错,在合约内部访问,我们可以直接访问函数就可以了。

备注:不论是属性还是方法,只有是public类型时,才可以通过合约地址进行访问。合约内部的this就是当前合约的地址,在合约内部要访问internal和private类型的属性和方法时,直接访问即可。

下一章:Solidify实现一个智能合约3(单继承与多继承)

Solidify实现一个智能合约2(属性和行为的访问权限)相关推荐

  1. Solidify实现一个智能合约12(字典/映射)

    语法 mapping(_keyType => _ValueType) 字典/映射其实就是一个一对一键值对存储关系. 举个例子:{age:18,stuId:10003,name:"His ...

  2. Solidify实现一个智能合约16(创建一个简单的代币)

    创建一个工程,新建一个EncryptedToken合约. 代码如下: pragma solidity ^0.4.4;contract EncryptedToken {uint INITIAL_SUPP ...

  3. Solidify实现一个智能合约17(创建BLC币)

    创建文件夹:mkdir BLC 进入后执行:truffle init 再执行:npm init,一直回车 再执行:npm install zeppelin-solidity hisee@liu:/me ...

  4. Solidify实现一个智能合约3(单继承与多继承)

    单继承 方法/函数的继承 代码示例 pragma solidity ^0.4.4;contract Animal {uint _weight;uint private _height;uint int ...

  5. Solidify实现一个智能合约10(一维数组和二维数组)

    固定长度的数组 固定长度类型数组的声明及其通过length方法获取数组长度求和. pragma solidity ^0.4.4; /* 数组一旦创建,长度不可变 但里面的内容可变 */ contrac ...

  6. Solidify实现一个智能合约14(元组)

    定义 元组使用小括号,只需要在括号中添加元素,并使用逗号隔开即可. PS:元组中各个元素的类型可以不一样,但数组中的元素必须一样. 示例1 pragma solidity ^0.4.4; contra ...

  7. Solidify实现一个智能合约5(值类型和引用类型的传递)

    值传递 代码示例: pragma solidity ^0.4.4;contract Person {uint _age;function Person(uint age) {_age = age;}f ...

  8. Solidify实现一个智能合约7(固定大小字节数组)

    固定大小字节数组 固定大小字节数组可以通过bytes1,bytes2,bytes3,...,bytes32来进行声明.PS:byte的别名就是bytes1. bytes1只能存储1个字节,也就是二进制 ...

  9. Solidify实现一个智能合约11(结构体)

    结构体的声明 pragma solidity ^0.4.4;contract Students {struct Person {uint age;uint stuId;string name;}Per ...

最新文章

  1. 医疗信息化、医学、医院管理、医疗器械资料下载
  2. 全套CRC校验的算法
  3. .NET Core Tools转向使用MSBuild项目格式
  4. php表格怎么合并单元格格式化,table标签的结构与合并单元格的实现方法
  5. c语言中锁的作用,C语言中的多线程死锁
  6. 宏定义是写在.h文件里还是.c文件里
  7. 【递归算法01】递归的调用机制
  8. 一些自成系统、完备的教程(链接、博客、github等)
  9. DirectX11 With Windows SDK--13 动手实现一个简易Effects框架、阴影效果绘制
  10. 凸优化第八章几何问题 8.6分类
  11. 微信的APP支付开发,服务端和支付端的问题
  12. 2022电工(中级)考试模拟100题模拟考试平台操作
  13. androidStudio 中使用矢量图
  14. python3网络爬虫-介绍
  15. cubase打开时,别的软件和网页无法正常播放视频。
  16. 安卓面试中高级安卓开发工程师总结之——如何写一份让HR主动邀请你面试的简历
  17. 对技术的态度/编程修养(上)
  18. 电机远计算机控制,电机控制器
  19. 计算机中专综合知识,湖南省汨罗市职业中专高考(八)计算机应用专业综合知识试题讲解.doc...
  20. 包裹细胞膜的磁性纳米微载体/负载斑蝥素的巨噬细胞膜包封金属有机框架纳米颗粒的研究

热门文章

  1. 闪送接口对接之获取AccessToken【JAVA】
  2. (附源码)spring boot SneakerHome球鞋商城 毕业设计 011229
  3. 自从我发现2345是流氓网址清除不掉后......
  4. 封装:WPF绘制曲线视图
  5. python function gamma_Python中使用Gamma函数的累积分布函数
  6. Android中ProgressDialog的用法
  7. java Object类及其常用方法
  8. Closure(闭包)类详解
  9. java 模拟多线程并发_Java中模拟同时并发请求
  10. 交通元宇宙主题汇总(附链接)