C#中get和SET
C#中get和SET,看来看去还是看不懂,通俗一点解释一下,用了有什么好处,不用会怎么样
如果你这样写是没有什么不一样的.
private int __Old;
public int Old{
get{return __Old;}
set{__Old = value;}
}
但是如果你这样写就不一样了.
private int __Old;
public int Old{
get{return __Old;}
set{// 这里加入了验证代码
if(value<0)
throw new ArgumentOutException("value", "输入值不能小于0");
__Old = value;
}
上面的例子说明属性中可以添加些代码进行处理. 也可以设置的访问的权限等.
在类中定义一个属性
public class Student
{
private string name
public string Name
{
set{name=value;}//这里是给私有属性name赋值
get{return name;}//这里取出私有属性name的值
}
}
c#在定义类时,通常要把类中声明的对象封装起来,使得外界不能访问这个属性。上述代码中如果去掉set部分,则外界只能读取name的值,如果去掉get部分,则只能给name赋值。这样就可以控制外界对私有属性name的访问权限了,这种写法是C#的一个特性。
当然你也可以通过自己创建函数来对name进行取值和赋值,但这样就显得比较麻烦了。
属性与普通变量不同就在于, 普通变量就是放在屋子里的东西, 是什么样明明白白. 而属性则是在屋子的门口放了个守门人, 你拿东西放东西要经过他.
这个守门人就是属性访问器, 拿东西就是 get, 放东西就是 set. 怎么拿怎么放是它说了算, 虽然你觉得好像就是直接拿直接放差不多.
GET SET 就是对外的接口 ,一般在实例中访问成员数据需要这个成员数据的访问方式为PUBLIC ,现在C#很高级了,GET 就是获取,SET 就是设置,但是它提供了跟好的收缩性,对GET 和SET 可以单独设置访问权限 比如你对某个成员数据只能读取或者只写,或者只有派生类可以访问等。。。 相对以前来说,没有属性访问器,需要通过函数来调用私有成员数据,属性提供了高效的访问模式和简单的书写。
就是为了安全啊~~
字段是你具体要操作的数据所以他的值不能出错,可是你又不能避免用户犯错~~
为了安全就用属性来给字段赋值,因为 在set中你可以对数据的安全进行验证,
get就更简单了验证完数据了就要把值给了字段所以要get
set的中文意思是“设置”;
get的中文意思是“获得”;
补充:
get 和 set 会在相应的时候自动调用
主要是为了隐藏程序内的数据结构时用
get是获取该属性的值,
set设置该属性的值。
在用set时有一个特殊的变量value
就是设置属性时的值
value 隐式参数,用于设置访问器以及添加或移除事件处理程序。
对类的属性进行 设置
比如用类名.属性=“”赋值 set作用
变量=类名.属性 取值 get 作用
C#中get和SET相关推荐
- GNU Make 使用手册(于凤昌中译版)
GNU Make 使用手册(中译版) 翻译:于凤昌 GNU make Version 3.79 April 2000 Richard M. Stallman and Roland McGrath 1 ...
- 面试:第十二章:所有总结
Java基础 java基本类型哪些,所占字节 byte :1个字节 short :2个字节 char :2个字节 int :4个字节 long :8个字节 float :4个字节 double :8个 ...
- linux内核分析(转自某位大哥网上的笔记)
启动 当PC启动时,Intel系列的CPU首先进入的是实模式,并开始执行位于地址0xFFFF0处的代码,也就是ROM-BIOS起始位置的代码.BIOS先进行一系列的系统自检,然后初始化位于地址0的中断 ...
- golang通过RSA算法生成token,go从配置文件中注入密钥文件,go从文件中读取密钥文件,go RSA算法下token生成与解析;go java token共用
RSA算法 token生成与解析 本文演示两种方式,一种是把密钥文件放在配置文件中,一种是把密钥文件本身放入项目或者容器中. 下面两种的区别在于私钥公钥的初始化, init方法,需要哪种取哪种. 通过 ...
- 总结一下在使用某里云服务器的过程中出现过的一些问题
此文总结在使用阿里云的过程中出现过的问题 想起来就记录一下 本人为言行负责! 海内选择腾讯华为,共勉! k8s不同命名空间的配置文件串掉了 k8s集群服务器购买上后,无法使用外网.连续购买了4台然 ...
- Kubernetes 中 设置pod不部署在同一台节点上
在k8s中,节点的调度主要由亲和性和污点来进行控制的. 而在亲和性部分由分为了节点亲和性和节点反亲和性. 节点亲和性是指在pod部署时,尽量(软策略)或者必须满足(硬策略)部署在某些节点上. ...
- 在Dockerfile中设置G1垃圾回收器参数
在Dockerfile中设置G1垃圾回收器参数 ENV JAVA_OPTS="\ -server \ -XX:SurvivorRatio=8 \ -XX:+DisableExplicitGC ...
- 在kotlin companion object中读取Bean,注入Bean对象
在kotlin companion object中读取Bean,注入Bean对象 在使用kotlin时,或多或少地会使用到一些公共组件,如 http. mongo. redis相关的组件. 使用组 ...
- 在k8s中使用gradle构建java web项目镜像Dockerfile
在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...
- 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法
数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序( ...
最新文章
- Android Studio 在Ubuntu 下快捷键失效
- Spring boot使用Bootstrap
- 卸载已经装的mysql_怎么卸载已经安装的mysql服务
- sqoop mysql 乱码_请问一下,用sqoop导数据到mysql如果遇到字段编码是utf8mb4的情况怎么处理?...
- DataTrigger
- 【arthas】Arthas 查看 Mbean 的信息
- 3.11 随机初始化
- 当,程序员突然想画画,AI+机器人就该登场了
- 极速pdf编辑器的水印如何去掉_如何去掉PDF右下角的全能扫描王水印
- 给定经纬度计算距离_根据两点经纬度计算距离
- html的nofollow标签,HTML中的A标签的nofollow属性解读
- python 中文转Unicode编码 Unicode编码转中文
- Spatial-Spectral Transformer for Hyperspectral Image Classification
- 致此刻选专业发愁的你 | 从学技术到做CEO:电子信息类专业在大学时期的正确打怪升级路径
- windows使用scp远程传输文件的方法
- 算完boxplot的四分位数以后,如何利用excel制作boxplot
- 积极心态建设:3P调试法
- 无刷直流电机虚拟中性点分析
- 最近的总结?想法?毒鸡汤?
- mysql入学时间_2016年小学生开学时间-2016全国小学开学时间一览表最新权威版-东坡下载...