Solidity属性和方法的访问权限
属性:默认是internal的类型,外部是不可以访问调用的,如果加上public的话,那么是会自动为这个属性加上一个get的方法的,比如uint public _age; => function _age() {} 自动生成
方法:默认是public的类型,外部是可以直接访问调用的
public:,不管是属性还是方法都可以通过合约地址的形式来进行访问,this.xxxxx()的形式,public属性:_age(),public方法:tets2()
internal,private:,就不用加this,直接访问,如果是属性的话,就直接属性age就可以了,如果是方法的话,那么就test2()就可以了,不用加this,指针的形式来访问(合约地址的形式)
pragma solidity ^0.4.; //internal默认是合约内部的访问权限
//internl和private外部都是不能访问的
uint _age;//现在外部是访问这个_age的,默认的是internal,内部访问
uint public _weight;//这个会自动生成一个get函数,public,可以被调用,在页面可以看到_weight方法(实际上是一个get方法) // public,当属性的类型是public的时候,会生成一个和属性名相同的并且返回值就是当前属性的get函数 //下面的方法把上面public自动生成的get函数给覆盖掉了
function _weight() constant returns(uint){
return ;//返回的是状态变量,调用_weight返回的是111
}
}
//如果想用合约的指针去访问的话,只能是public的类型
pragma solidity ^0.4.; contract Person { uint _age;//默认是internal的类型
uint public _weight;//会自动生成一个_weight的get函数
uint private _money;
function test() constant public returns (uint) { return _age;
} function test2() constant internal returns(uint){
return _age;
}
function get() contract returns(uint) {
this._weight();//_weight会自动生成一个_weight的get函数,所以是可以通过this来进行访问的,但是_money是private的类型,所以是不能通过这个this指针的形式来进行访问的,否则会报错
return this.test();//因为test方法是public的类型,所以是可以访问调用的
//this就是当前的合约地址,如果是internal的类型的话,不能通过this来进行访问
//如果要访问internal的方法类型的时候,直接把this去掉,就是test()()
} function get2() constant returns(uint){
return test2();//tets2是internal的方法类型,所以是不用加上this直接进行访问的
//注明:如果是intrnal,private的类型的时候,是不可以通过指针进行访问的,在合约内部访问都会报错,加指针的话
}
}
属性默认是internal的类型,是不会自动生成属性的get函数的,如果是public的话,那么会自动生成这个属性的get函数,可以被调用
方法默认是public的类型
如果内部访问public的类型,不管是方法还是属性的话,可以通过this.xx(),的形式(合约地址的形式)来访问,如果是internal,private是不可以通过这种方式来访问的,直接属性,或者方法()就可以访问
Solidity属性和方法的访问权限的更多相关文章
- ethereum(以太坊)(二)--合约中属性和行为的访问权限
pragma solidity ^0.4.0; contract Test{ /* 属性的访问权限 priveta public internal defualt internal interlnal ...
- Java基础知识强化17:JAVA不可以将所覆盖的方法的访问权限变得比父类的小
首先我们看一下下面的代码如下: interface I { void go(); } abstract class A implements I { } class C extends A { voi ...
- Java继承,重写方法时改变方法的访问权限
java中的方法天生具有继承多态特性,这点与C++有很大不同(需要在父类方发上加virtual关键字),但用起来确实方便了许多. 最简单的继承多态 声明一个接口BaseIF,只包含一个方法声明 pub ...
- Swift 中 Selector 方法的访问权限控制问题
今天用Swift写了个视图,在视图上加个手势,如下所示: panGestureRecognizer = UIPanGestureRecognizer(target: self, action: &qu ...
- python3 类的属性、方法、封装、继承及小实例
Python 类 Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法. 对象可以包含任意数量和类型的数据. p ...
- javascript中类的属性访问权限研究(1)
本篇文章主要针对javascript的属性进行分析,由于javascript是一种基于对象的语言,本身没有类的概念,所以对于javascript的类的定义有很多名字,例于原型对象,构造函数等,它们都是 ...
- Java继承多态中的方法访问权限控制
java中的方法天生具有继承多态特性,这点与C++有很大不同(需要在父类方发上加virtual关键字),但用起来确实方便了许多. 最简单的继承多态 声明一个接口BaseIF,只包含一个方法声明 pub ...
- 第60天:js常用访问CSS属性的方法
一. js 常用访问CSS 属性的方法 我们访问得到css 属性,比较常用的有两种: 1. 利用点语法 box.style.width box.style.top 点语法可以得到 ...
- 《Effective C#》读书笔记-1.C# 语言习惯-1.使用属性而不是可访问的数据成员
思维导图: 大纲: 1.使用属性而不是可访问的数据成员 属性 指定不同的访问权限 隐式属性降低了声明属性的工作量 允许将数据成员作为公共接口的一部分暴露 ...
随机推荐
- Python--day01(计算机基础)
Python: python 是一门面向后台的编程语言,在大数据,数据分析,机器学习,人工智能,爬虫,自动化运维,web等方面具有强大功能. 基础阶段学习内容:基本语法,文件处理,函数,模块,面向对象 ...
- (haut oj 1261 ) 地狱飞龙 利用不定积分求值
题目链接:http://218.28.220.249:50015/JudgeOnline/problem.php?id=1261 题目描述 最近clover迷上了皇室战争,他抽到了一种地狱飞龙,很开心 ...
- mac用BootCamp装windows装完之后驱动问题
刚装完会有一个临时盘里面找到BootCamp文件夹然后运行setup.exe,装完即可.
- MySql下实现先排序后分组
最近在工作中遇到一个先排序后分组的需求,发现MySql不同的版本有不同的结果,特此记录. 举例:要求在shop表中查询出各类型商店中价格最高的商品. --表结构-- create table `sho ...
- 关于Java面试
Java基础知识复习 1. 简单讲一下Java跨平台的原理 由于操作系统(Windows.Linux)支持的指令集,不是完全一致的.就会让我们程序在不同的操作系统上执行不同的代码.Java开发了不同操 ...
- JDBC工具类完整版!
package com.aaa.util; import java.sql.*; import java.util.ArrayList; import java.util.HashMap; impor ...
- Python——逻辑运算(or,and)
print(0 and 2 > 1) #结果0 print(0 and 2 < 1) #结果0 print(1 and 2 > 1) #结果True print(1 and 2 &l ...
- Django------多表操作
一. 创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一的 ...
- 一个故事讲清楚BIO NIO 异步
转载请引用:一个故事讲清楚NIO 假设某银行只有10个职员.该银行的业务流程分为以下4个步骤: 1) 顾客填申请表(5分钟): 2) 职员审核(1分钟): 3) 职员叫保安去金库取钱(3分钟): 4) ...
- LVM备份(1)-创建LVM逻辑卷
LV(Logical Volume) - 逻辑卷 VG(Volume Group) - 卷组 PV(Physical Volume) - 物理卷 1.查看分区信息:fdisk -l 可看到磁盘大小为1 ...