这几天在搬砖时候用到了set()与get(),同事问了我一些问题,我打算在博客中总结一下。
觉得帮助到了您,帮我点个赞哦。

属性访问器

其实说白了就是操作一个属性,更通俗一点说就是对一个变量的取值与赋值。

先来看get()

get 访问器必须在 return 或 throw 语句中终止,并且控制不能超出访问器体。

private int a;   // 私有的变量
public int A  // 公有变量,这个变量作用就是得到私有变量的值
{get {return a; //这里的return就是上边说的必须在 return 或 throw 语句中终止}
}

现在还是不懂对吧,这个变量怎么还能加{ }里边写语句呢。嘿嘿就是这么神奇,就是这么规定的。
当你改变a的值,A的值也会变。
假如你在主函数当中有这么个操作:

a=5;

你会发现运行完a=5以后A也变成了5。

当你使用这个公有变量A当做右值给其他变量赋值的时候,他就会执行{ }里边的语句。
假如你在主函数当中有这么个操作:

int B=A;

这个时候并不是把A的值直接给B,而是先执行A里边的get(),把a的值返回给A,再将A的值传递给B;
这时候相当于

int B=0;
A=a;
B=A;

只带有 get 访问器的属性称为只读属性。无法对只读属性赋值。
假如你在主函数当中有这么个操作:

int B=2;
A=B;

这个时候直接把B的值给A,但是编译器报错,提示A是只读的;

当引用属性时,除非该属性为赋值目标,否则将调用 get 访问器读取该属性的值。
白话解释一下,当变量定义时使用get,那么变量在作为右值给其他变量赋值或者当做函数参数值时候,会先运行get里边的语句。当做为左值被赋值时候则报错。
现在总结一下:
1.get就是返回一个值或者说属性;
2.在定义时使用get的变量在使用作为右值时先执行get里边的语句返回给变量再去使用;
3.在定义时使用get的变量在使用作为左值时报错;
不能光说不练啊,接下来写个控制台程序来验证一下。
先来源码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApplication1
{class Program{static private int a = 3;static public int A{get { return a; }}static void Main(string[] args){int B=0;a = 5;A = 22;B = A;}}
}

这个时候编译一下,报错了:
错误 1 无法对属性或索引器“ConsoleApplication1.Program.A”赋值 – 它是只读的

接下来就把这句话屏蔽掉,编译运行打断点。

在给a赋值时候,在使用A时候打个断点,在A的get里边打个断点。
运行一下看一下
先运行到:a = 5;这个时候A与a都还为3;

按F10单步再接着往下边运行
我们惊奇的发现Aa同时变成了5

按F10单步再接着往下边运行,就会进入get

按F10单步再接着往下边运行,才到A给B赋值。

好啦,get我们讲完啦。接下来是set

再来看set()

set 访问器与返回 void 的方法类似。它使用称为 value 的隐式参数,此参数的类型是属性的类型。

private int a;
public int A
{set {a = value; }
}

当你改变A的值,a的值也会变。
假如你在主函数当中有这么个操作:

A=5;

你会发现运行完A=5以后a也变成了5。

当你使用这个公有变量A当做左值被其他变量赋值的时候,他就会执行{ }里边的语句。
假如你在主函数当中有这么个操作:

int B=3;
A = B;

这个时候并不是只把B的值给A,还会将A的值赋值给a;
这时候相当于

int B=3;
A=B;
a=A;

只带有 set 访问器的属性称为只写属性。只写属性除作为赋值的目标外,无法对其进行引用。
假如你在主函数当中有这么个操作:

int B=2;
A=B;

这个时候直接把A的值给B,但是编译器报错,提示A是只写的;

现在总结一下:
1.set改变A变量时候a的值也会改。
2.只有set属性的变量是只读的。

不能光说不练啊,接下来写个控制台程序来验证一下。
先来源码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApplication1
{class Program{static private int a = 3;static public int A{set { a = value; }}static void Main(string[] args){int B = 0;A = 22;B = A;}}
}

这个时候编译一下,报错了:
错误 1 无法对属性或索引器“ConsoleApplication1.Program.A”赋值 – 它是只读的

接下来就把这句话屏蔽掉,编译运行打断点。

我们在给A赋值时打断点,再在set处打断点。
运行一下看一下
先运行到:a = 3;这个时候A里边还是空的,这是因为A是只写的没办法读出来他的数值;

按F10单步再接着往下边运行,直接先到set中,a的值变成了22。神奇吧

按F10单步再接着往下边运行,程序结束。

好啦,get、set我们讲完啦。接下来是结合在一块。

再来看set()get()

同时带有 get 和 set 访问器的属性为读写属性。

private int a;   // 私有的变量
public int A  // 公有变量,这个变量作用就是得到私有变量的值
{get {return a; }set {a = value; }
}

经过上述讲解,我们直接来看代码,编译调试看一下。源代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApplication1
{class Program{static private int a = 33;static public int A{get { return a; }set { a = value; }}static void Main(string[] args){int B;B = A;a = 55;}}
}

这个代码自己编译调试一下吧,自己建一个工程,直接复制过去就好了。

总结:

1、A4与a4的值,总是相等。

2、若要修改a4,则需要通过A4修改即可。a4的往往通过设置外部属性A4值的方式,然后在A4属性内设置一些条件,来更新a4。

3、Value的值,总是等于外部属性A4的值。

set()与get()详细解答(C#)相关推荐

  1. pandas.get_dummies函数用法详细解答(实践)

    pandas.get_dummies函数用法详细解答(实践) pandas.get_dummies函数用法详细解答(实践)_skywf的博客-CSDN博客 one-hot encoding one-h ...

  2. 校招社招必备核心前端面试问题与详细解答

    本文总结了前端老司机经常问题的一些问题并结合个人总结给出了比较详尽的答案.网易阿里腾讯校招社招必备知识点. 原理讲解参考:前端增长-重新定义大前端 在线课程:网易云课堂课程      思否课堂 官方博 ...

  3. 2021年 第13届 全国大学生数学竞赛 初赛(非数学类)试题详细解答

    [2020年第12届全国大学生数学竞赛--资源分享 ][1~11届省赛决赛考题及题解(数学类.非数学类).推荐学习网址.复习备考书籍推荐] 2019年 第11届 全国大学生数学竞赛 初赛(非数学类)试 ...

  4. c语言加法结合性,C语言 运算符 的结合性 怎么理解?求举例子详细解答!!

    C语言 运算符 的结合性 怎么理解?求举例子详细解答!! 关注:284  答案:5  信息版本:手机版 解决时间 2019-01-11 21:03 战魂 2019-01-11 10:01 C语言 运算 ...

  5. Linux 170个常见问题的详细解答

    Linux 170个常见问题的详细解答   <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:offi ...

  6. 操作系统课设详细解答

    操作系统课设详细解答 一.题目一 实验一 Windows 进程管理 二.实验目的 (1)学会使用 VC 编写基本的 Win32 Consol Application(控制台应用程序). (2)通过创建 ...

  7. 「 最新大厂常考架构技术面试题 + 详细解答」

    很多没有收到offer的朋友一直在 后台问我,怎么梳理面试要考的知识点.这里必须要和大家再强调一下要准备的7大方面!总结起来包括:JAVA编程语言+数据结构和算法题+计网+操作系统+设计模式+数据库+ ...

  8. 【机试题】2014大疆嵌入式笔试题(附超详细解答,下篇)

    上一篇主要是对<2014大疆嵌入式笔试题>的前一部分进行了解答,本文主要是对接下来的几道题进行解答.想要参考上一篇的点击链接:[机试题]2014大疆嵌入式笔试题(附超详细解答,上篇). 嵌 ...

  9. E - Obstacle Course的详细解答

    E - Obstacle Course的详细解答 You are working on the team assisting with programming for the Mars rover. ...

  10. 20核服务器项目,详细解答E5-2680v2,20核40线程服务器的具体用途怎么体现出来

    由我锐讯网络李明辉给你详细解答E5-2680v2,20核40线程服务器的具体用途怎么体现出来. E5-2680v2  20核40线程服务器 一.配置: CPU: E5-2680v2*2  20核40线 ...

最新文章

  1. Linux网络编程基础(一)
  2. linux下openldap版本查询,用openldap进行linux认证
  3. CentOS7 shell脚本安装jdk
  4. Linux系统编程10:进程入门之系统编程中最重要的概念之进程进程的相关操作使用fork创建进程
  5. 如何选择高速存储、查询数据库
  6. matplotlib绘制平滑曲线
  7. Pandas to_timedelta
  8. 项目构建之maven篇:3.m2eclipse使用
  9. matlab定位噪声位置,Matlab怎么样调节KALMAN滤波中的过程噪声和观测噪声
  10. protobuf与protoc
  11. Office办公软件测试题
  12. IOS 苹果手机 使用重力加速度,js web devicemotion,deviceorientation事件
  13. Ruby + Passenger 5 分钟 入门
  14. IE 无法正常打开,刚启动就关闭
  15. Postman做接口测试设置断言
  16. 怎么把pdf格式转成word文档?如何将 PDF 转换为 Word
  17. 刨根问底-AQS源码解析
  18. Vue3计算属性和异步计算属性
  19. java实现md5的验证
  20. kernel方法的直观理解与详述

热门文章

  1. javascript作用域容易记错的两个地方
  2. 函数声明指令(stdcall, cdecl,pascal,register)
  3. MongoDB升级导致启动失败
  4. (四)RabbitMQ消息队列-服务详细配置与日常监控管理
  5. Java String:重要到别人只能当老二的字符串类
  6. python学习笔记之装饰器、递归、算法(第四天)
  7. LeetCode Permutations
  8. MsWord 操作总结
  9. 17款开源论坛系统/Forum Software(转载)
  10. java基础1之java语言基础1