博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于C#中get和set
阅读量:6966 次
发布时间:2019-06-27

本文共 1836 字,大约阅读时间需要 6 分钟。

在看书的时候看见了一段代码,有两个类person:

public class person    {      public string name;    }    public class person    {      public string Name{
set;get;} }

 第一个类型的name属性未封装,其name属性直接通过public关键字暴露给系统中的其他类了,而第二个类型的name属性通过get set关键字进行了封装,get和set分别对应的是可读和可写,相当于如下代码:

private string name;    public string Name    {      get { return name; }     set { name = value; }   }

 简单说下区别吧:当实例化第一个“person”这个类时,系统在分配内存空间时对name属性直接分配内存,之后对name属性的操作也是直接操作内存中name属性所在的这个块;而当实例化第二个“person”类型时,系统会先分配一个叫name的private私有的内存空间,之后的读与写的操作都是通过Name这个public的类似于指针的东西来关联name进行,以此达到封装的目的,并且通过get和set关键字也可以控制可读还是可写。关于封装的官方解释:封装就是隐藏实现细节将属性私有化,提供公有方法访问私有属性,通过这些公有方法访问私有属性,这样让数据更加安全。

 

 至于get和set的作用,除了控制读写之外还有其他的作用,举个简单的例子,比如说当我给Name赋值的时候想要先进行一些逻辑判断,就可以这样:

private string name;        public string Name        {            get { return name; }            set            {             name = String.IsNullOrEmpty(value) ? "空" : value;            }        }

再举例说明下:

    假设类是一银行,既能存钱也能取钱

Private Money;    Private class bank()    {      get      {         return Money;      }      Set      {         Money=value;      }    }

 Money 就像银行里的自动取款机,你看不见里面的Money,但你能用set(存钱),用get(取钱)。Money是一个私有字段,是封装在类中的,类以外的程序不能直接访问。C#中get、set用法中,类的set和get成员是外部程序访问类内部属性的唯一方法,就像你去银行取钱,你不能直接从银行的保险柜里拿钱,而是银行营业人员把钱取出来给你的。

    属性在调用者看来就像一个普通的变量,但作为类的设计者,你可以利用属性来隐藏你类中的一些字段,使外界只能通过属性来访问你的字段,你可以通过属性来限制外界对你的字段的存取,就利用get、set。如果想让用户随意存取你的字段,那么就实现get、set;如果只想让用户读取字段,就只实现get;若只想让用户写字段就只实现set。同时还可以在set和get中对用户传递的值进行一些验证工作,以确保你的字段将含有正确的值。

Private int a;    Public int index    {      get      {        return a;      }      set      {         If (value>0)           a=value;         else           a=0;      }    }

可看出,get、set用法中

    一则是隐藏组件或类内部的真实成员;

    二是用来建立约束的;

    三是用来响应属性变化事件,当属性变化是做某事,只要写在set方法里就行。

   当你想读出或写入属性的值时,存取标志限定了被实现的语句。用于读出属性的值的存取标志记为关键字get,而要修改属性的值的读写符标志记为set。

转载于:https://www.cnblogs.com/xiaohua92/p/5243593.html

你可能感兴趣的文章
王者荣耀使用什么编程语言开发的?
查看>>
Kubernetes-离线部署Kubernetes 1.9.0
查看>>
实验吧---忘记密码了
查看>>
C/C++中int128的那点事
查看>>
JAVA中Sql时间格式与util时间格式转换
查看>>
前端概述及网页入门
查看>>
Java Servlet web.xml 配置详解
查看>>
javascript mvc 代码
查看>>
七牛镜像存储使用手册
查看>>
iOS学习笔记之 Objective-C (二)
查看>>
eclipse提交项目到github
查看>>
小米正式开源 Istio 管理面板 Naftis
查看>>
小白们不要慌,这里为你提供免费靠谱的python学习流程图
查看>>
利用种子文件对windows7的攻击-学习笔记
查看>>
微信小程序中异步处理终极方案async/await
查看>>
Java 面向对象 之 方法的覆盖
查看>>
开发者应该了解Kubernetes对于程序的影响点
查看>>
[Spark]Spark Streaming 指南三 DStreams
查看>>
LeetCode 14 Longest Common Prefix(最长公共前缀)(String)
查看>>
关注 | 《财富》发布“改变世界”企业 阿里巴巴因农村战略位列中国第一
查看>>