转自 https://www.cnblogs.com/zhangtaotqy/p/7998543.html

首先搞清楚get和set有什么用,在面向对象编程里面,有的类的数据是私有的,是封装起来的,所以为了读取写入对应的私有数据,c#采用了关键字get和set,其中get负责读取私有数据set负责写入私有数据,但这两种用法应该并不绝对,我见过在get里面进行写入操作的。

我们在学习C#语法的属性时,都要首先和GET,SET访问器打交道,从英文的字面意思上理解,GET应该就是获得什么什么,而SET应该是设置什么什么,那我们看一下,官方是怎么定义这对访问器的:get是读取属性时进行的操作,set是设置属性时进行的操作。定义一个属性如果只有get,这个属性就是只读的。同样,只有set,属性就是只写的,当然只写的属性我觉的意义不是很大。

接下来我们通过一些代码实例来接触一下GET和SET访问器

class Bank
{private int money;//私有字段public int Money  //属性{//GET访问器,可以理解成另类的方法,返回已经被赋了值的私有变量moneyget { return money;  }//SET访问器,将我们打入的值赋给私有变量moneyset { money = value; }}
}

我们可以打个生动的比方:

Money属性就像银行里的自动存取款机,你看不见里面的money,但你能用set(存钱),用get(取钱)。money是一个私有字段,是分装在类中的,类以外的程序不能直接访问的,类的set和get成员是外部程序访问类内部属性的唯一方法,就像你去银行取钱,你不能直接从银行的保险柜里拿到钱,而是银行营业人员把钱取出来给你的。
那我们设置了Money属性,怎么使用呢??

class Program
{static void Main(string[] args){//实例化一个Bank银行Bank bank = new Bank();//对Money属性做赋值操作,这时我们访问的是SET访问器bank.Money = 15;//对Money属性做取值操作,这时我们访问的是GET访问器int a = bank.Money;}
}

细心的朋友可以发现当我们设置断点在SET访问的中,执行代码 bank.Money = 15;时,就会进入我们属性中的SET访问器了。

以上就是我们的SET和GET访问器的最基本的应用了。

但是我们为什么要用GET和SET访问器呢??
通过GET和SET对公有变量Money进行读写操作,实际就是间接更改money私有变量的值,那既然如此。为何不设money为public,让实例直接对money进行读写操作呢?我们是不是在多此一举呢?

其实,我当初刚接触GET和SET就很理解,并不是说他们的含义难理解,而是为什么要用?为何不直接用个public的字段变量来代替呢?

理解一:用了GET和SET能让赋值和取值增加限制

class Bank
{private int money;//私有字段public int Money  //属性{//GET访问器,可以理解成另类的方法,返回已经被赋了值的私有变量moneyget { return money;  }//SET访问器,将我们打入的值赋给私有变量money,并且加了限制,不能存负的set{if (value >= 0){money = value;}else{money = 0; }}}
}

这样的话,我们是永远无法给Money属性赋值负的金钱了!

其实这种应用才我们的实际的项目中,属性设置中非常常见!例:

 public string ApplyStaff{//延迟加载ApplyStaff对象get{if (this.IsGhost){LazyLoaderFactory.GetLoader().LoadApplicationConfirm(this);}return applyStaff;}set{//判断输入的字符的长度if (value.Length > 40){throw new Exception("领用人不能超过40个字符。");}this.applyStaff = value;}}public string BillName{get{return billName;}set{if (value==string.Empty){throw new Exception("单据名称不能为空");}else if (value.Length > 40){throw new Exception("单据名称长度不能超过40个字符");}else{this.billName = value;}}}

如果在SET访问器中设置这个属性的一些特性,比如说不能为空,长度大小,必须为数字,各类正则表达式等等,然后抛出异常,表示层再来接受,这样就可以少写很多验证程序了。

C#的get和set用法相关推荐

  1. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  2. Pandas_transform的用法

    先来看一个实例问题. 如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例.例如第一条数据的最终结果为:235.83 / (235.83+232.32+107.9 ...

  3. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  4. pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法

    squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...

  5. python yield 和 yield from用法总结

    #例1. 简单输出斐波那契數列前 N 个数 #缺点:该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列 #要提高 fab 函数的可复用性,最好不要直接打印出数列,而 ...

  6. tf.nn.embedding_lookup()的用法

    函数: tf.nn.embedding_lookup( params, ids, partition_strategy='mod', name=None, validate_indices=True, ...

  7. OpenMP用法大全

    OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...

  8. Dorado用法与示例

    Dorado用法与示例 dorado用后总结 一.dorado概念 dorado的产品全名是"dorado展现中间件".从产品形态上dorado由两部分组成,第一部分是一个具有AJ ...

  9. TensorFlow用法

    TensorFlow用法 什么是TensorFlow TensorFlow是一个开源软件库,用于使用数据流图进行数值计算.图中的节点表示数学运算,而图的边缘表示流动的多维数据数组(张量).这种灵活的体 ...

  10. TensorFlow Keras API用法

    TensorFlow Keras API用法 Keras 是与 TensorFlow 一起使用的更高级别的作为后端的 API.添加层就像添加一行代码一样简单.在模型架构之后,使用一行代码,可以编译和拟 ...

最新文章

  1. 不“刷脸”回不了家?郑州业主拒绝录入人脸信息回家如做贼,物业:少数服从多数...
  2. 重拾IP路由选择:CCNA学习指南中的IP路由选择
  3. (022)[工具软件]图片浏览 JPEGView
  4. Android---手动创建线程与GUI线程同步(二)
  5. python硬件交互_对Python的交互模式和直接运行.py文件的区别详解
  6. 软件本地化 pdf_软件本地化与标准翻译
  7. MySQL操作权限整理
  8. AlipaySDK Cocoapods支持
  9. 影响页面布局的css属性,6 和页面布局有关的CSS属性(三)
  10. 磨刀不误砍柴工,ORAchk健康检查好帮手
  11. TestNG安装及配置
  12. linux shell 数字计算详解
  13. php paypal ipn,PHP 开发详解:PayPal Instant Payment Notification (IPN)
  14. 小程序的优势和劣势是什么?
  15. kappa一致性检验教程_Kappa一致性检验:两种诊断方法的结果是否一致?
  16. 【雪野实训记录】Oracle数据库 T4作业——事务和数据库对象
  17. GD MCU的SWD和SCLK管脚被当成IO脚占用导致找不到设备
  18. 揭秘APP软件开发者百万富翁之路:造程序的工厂
  19. BetaFlight飞控AOCODARC-F7MINI固件编译
  20. Typecho博客后台登录页面美化插件

热门文章

  1. ICM-20602 IMU ACCEL/GYRO/TEMP I2C/SPI LGA
  2. 《HarmonyOS开发 – 小凌派-RK2206开发笔记》第4章 串口应用开发
  3. 回复和评论功能的实现
  4. Android开发—基于OpenCV实现相机实时图像识别跟踪
  5. 基于Anki+Vocabulary的英语单词记忆法
  6. 小学计算机教室海报,小学美术制作海报教案.doc
  7. Microsoft Outlook设置GMail谷歌邮箱
  8. 最小二乘法 几何意义
  9. 冰点还原忘记密码如何修改配置或卸载
  10. [视频发布] 掘金 Podcast 报名中,摩拜单车、美团点评团队分享 Vue 最佳实践