又是一个语法糖,属性 = GetXXX() Set XXX() 的语法糖.

  属性就是封装的方法.看CLR,看的就是去伪存真,剥离语法糖之后的C#,其实也就是那么回事.

  属性分为无参属性和有参属性.性能上由于在编译的时候使用了内联技术,完全可以忽略性能损失不计.

  无参属性

  这种属性就是在Java或者其他语言中的Get Set方法,比如我有这么个类:

class Person
{public int Age;public string Name;
}

  其中有年龄和姓名两个字段,我们提供get和set方法进行封装访问他们的过程,以达到保护字段安全性的作用.

class Person
{int m_age;string m_name;public Person(){}public string getName(){return m_name;}public void setName(string name){m_name = name;}public int getAge(){return m_age;}public void setAge(int age){m_age = age;}
}

  为什么这么做呢?如果不使用get和set方法不也是可以访问字段的么?是的,但是我们也可以轻易的就破坏字段的安全性,比如:

Person p = new Person();
p.Age = -5; //没有人的年龄是-5,这显然是不正确的,但是我们做到了

  而使用第二种get set 方式,我们就能很容易的在其中进行检测数值的正确性,以保证不会出现错误.

{  //...   public void setAge(int age){if(m_age < 0) throw new Exception("Wrong Age!");m_age = age;}
}

  这个时候进行赋值操作就会抛出异常了:

Person p = new Person()
p.setAge(-5);    //throw Exception!!!

  .Net只是将这种繁琐的过程封装了下,于是就变成了我们经常使用的属性了.本质上,编译器编译时还是会解压缩代码成为get set方法.

  三个主要的原因让我们使用Get Set 方法或者属性,而不是直接暴露字段

  1.希望访问或者设置字段的时候执行一些其他关联操作,比如:延迟加载,缓存取值等;

  2.希望以线程安全的方式访问字段(内部手动实现);

  3.字段可能只是一个逻辑值,通过计算得到,比如:有长度和宽度两个字段,只需要设置一个只读的面积属性就可以通过计算得到其值.

  有参属性 ---- 索引器

  我不打算讨论这块内容,我从学习C#以来从没有用到过,也很少或者说没有在其他人的代码中见识到使用索引器的.我只能说这个东西对我来说太鸡肋了,所有他能做到的,你通过方法都能做到,而且代码的可阅读性和可理解性比这个要好上N多倍.

  所以归根到底,属性就是语法糖,封装了Get Set 方法,Over.

转载于:https://www.cnblogs.com/woodywu/p/3266776.html

漫话CLR ---- 属性相关推荐

  1. WPF 让普通 CLR 属性支持 XAML 绑定(非依赖属性),这样 MarkupExtension 中定义的属性也能使用绑定了

    如果你写了一个 MarkupExtension 在 XAML 当中使用,你会发现你在 MarkupExtension 中定时的属性是无法使用 XAML 绑定的,因为 MarkupExtension 不 ...

  2. WPF入门教程(七)---依赖属性(3)(转)

    WPF入门教程(七)---依赖属性(3) 2018年08月24日 08:33:43 weixin_38029882 阅读数:50 四. 只读依赖属性 在以前在对于非WPF的功能来说,对于类的属性的封装 ...

  3. 使用 Fluent API 配置/映射属性和类型

    配置EF使之在映射数据时绕开约定:注释和Fluent API.注释仅涵盖一部分Fluent API功能. 通过重写DbContext上的OnModelCreating方法来访问Code First F ...

  4. WPF入门教程系列十三——依赖属性(三)

    四. 只读依赖属性 在以前在对于非WPF的功能来说,对于类的属性的封装中,经常会对那些希望暴露给外界只读操作的字段封装成只读属性,同样在WPF中也提供了只读属性的概念,如一些 WPF控件的依赖属性是只 ...

  5. WPF基础到企业应用系列7——深入剖析依赖属性(三)

    八. 只读依赖属性 我们以前在对简单属性的封装中,经常会对那些希望暴露给外界只读操作的字段封装成只读属性,同样在WPF中也提供了只读属性的概念,如一些 WPF控件的依赖属性是只读的,它们经常用于报告控 ...

  6. WPF快速入门系列(2)——深入解析依赖属性

    一.引言 感觉最近都颓废了,好久没有学习写博文了,出于负罪感,今天强烈逼迫自己开始更新WPF系列.尽管最近看到一篇WPF技术是否老矣的文章,但是还是不能阻止我系统学习WPF.今天继续分享WPF中一个最 ...

  7. 《OEA - 实体扩展属性系统 - 设计方案说明书》

    这篇设计文档是 12 月份写来参加公司的研发峰会的,自己倒是信心满满,不过最后还是没有入围.现在想想也没啥大用,所以贴出来,期待与园友交流. 文档有点长,没全部贴在博客中,有兴趣的可以下载附件中的 P ...

  8. 《深入浅出WPF》学习笔记之深入浅出话属性

    依赖属性是一种可以从父级元素继承,并且可以通过Binding从数据源获取,当从父级继承时不占用内存的属性系统.拥有依赖属性的对象称为依赖对象.WPF允许在创建对象时并不分配用于存储数据的空间,而在需要 ...

  9. 一站式WPF--依赖属性(DependencyProperty)

    2009-10-20 11:32 by 周永恒, 22441 阅读, 24 评论, 收藏, 编辑 书接上文,前篇文章介绍了依赖属性的原理和实现了一个简单的DependencyProperty(DP), ...

最新文章

  1. 手把手教你如何制作可视化大屏!
  2. 一次竞赛案例的分享——基于正则表达式的深度学习应用
  3. sklearn中的metrics
  4. 如何在Chrome调试器里检查嵌套Observable对象
  5. c#爬虫-1688官网自动以图搜图
  6. C#下实现的K-Means优化[1]-「离群点检测」
  7. 搭建Kafka集群环境
  8. Linux哈希表数组,开地址哈希表(Hash Table)的接口定义与实现分析
  9. Go 标准库介绍五: io
  10. 2019年下半年教师资格中学《综合素质》真题与参考答案
  11. Java网络编程入门(软件结构、网络通信协议、网络编程三要素)
  12. 组合逻辑电路的分析与设计
  13. 统计学和计算机的关系,浅议统计学与其他学科的关系
  14. 交换机和集线器的区别
  15. Linux学习笔记——~/.bash_profile文件
  16. vue 嵌套表格组件_vue+element-ui实现嵌套表格导出
  17. 基于ResNet50网络的简单垃圾分类网络
  18. Kafka入门经典教程
  19. windows debug tools
  20. matlab 地质学,大类学子有话说 | 地球科学与工程学院:探寻地球的奥秘

热门文章

  1. 使用CAJViewer 提取PDF文件中的文字
  2. logstash filter 处理json数据按原始数据字段数据存储
  3. Openlayer4 - 最好最强大的开源地图引擎
  4. Linux系统下授权MySQL账户访问指定数据库和数据库操作
  5. PartyUs 待添加内容(不定期更新)
  6. eax ...edi esp ebp寄存器简介(转)
  7. java输入框1-100_Java开发笔记(一百三十九)JavaFX的输入框
  8. mysql读写分离的含义_mysql的读写分离问题剖析
  9. 末日博士:比特币不应出现在散户或机构投资者的投资组合中
  10. SAP License:SD应用要点