漫话CLR ---- 属性
又是一个语法糖,属性 = 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 ---- 属性相关推荐
- WPF 让普通 CLR 属性支持 XAML 绑定(非依赖属性),这样 MarkupExtension 中定义的属性也能使用绑定了
如果你写了一个 MarkupExtension 在 XAML 当中使用,你会发现你在 MarkupExtension 中定时的属性是无法使用 XAML 绑定的,因为 MarkupExtension 不 ...
- WPF入门教程(七)---依赖属性(3)(转)
WPF入门教程(七)---依赖属性(3) 2018年08月24日 08:33:43 weixin_38029882 阅读数:50 四. 只读依赖属性 在以前在对于非WPF的功能来说,对于类的属性的封装 ...
- 使用 Fluent API 配置/映射属性和类型
配置EF使之在映射数据时绕开约定:注释和Fluent API.注释仅涵盖一部分Fluent API功能. 通过重写DbContext上的OnModelCreating方法来访问Code First F ...
- WPF入门教程系列十三——依赖属性(三)
四. 只读依赖属性 在以前在对于非WPF的功能来说,对于类的属性的封装中,经常会对那些希望暴露给外界只读操作的字段封装成只读属性,同样在WPF中也提供了只读属性的概念,如一些 WPF控件的依赖属性是只 ...
- WPF基础到企业应用系列7——深入剖析依赖属性(三)
八. 只读依赖属性 我们以前在对简单属性的封装中,经常会对那些希望暴露给外界只读操作的字段封装成只读属性,同样在WPF中也提供了只读属性的概念,如一些 WPF控件的依赖属性是只读的,它们经常用于报告控 ...
- WPF快速入门系列(2)——深入解析依赖属性
一.引言 感觉最近都颓废了,好久没有学习写博文了,出于负罪感,今天强烈逼迫自己开始更新WPF系列.尽管最近看到一篇WPF技术是否老矣的文章,但是还是不能阻止我系统学习WPF.今天继续分享WPF中一个最 ...
- 《OEA - 实体扩展属性系统 - 设计方案说明书》
这篇设计文档是 12 月份写来参加公司的研发峰会的,自己倒是信心满满,不过最后还是没有入围.现在想想也没啥大用,所以贴出来,期待与园友交流. 文档有点长,没全部贴在博客中,有兴趣的可以下载附件中的 P ...
- 《深入浅出WPF》学习笔记之深入浅出话属性
依赖属性是一种可以从父级元素继承,并且可以通过Binding从数据源获取,当从父级继承时不占用内存的属性系统.拥有依赖属性的对象称为依赖对象.WPF允许在创建对象时并不分配用于存储数据的空间,而在需要 ...
- 一站式WPF--依赖属性(DependencyProperty)
2009-10-20 11:32 by 周永恒, 22441 阅读, 24 评论, 收藏, 编辑 书接上文,前篇文章介绍了依赖属性的原理和实现了一个简单的DependencyProperty(DP), ...
最新文章
- 手把手教你如何制作可视化大屏!
- 一次竞赛案例的分享——基于正则表达式的深度学习应用
- sklearn中的metrics
- 如何在Chrome调试器里检查嵌套Observable对象
- c#爬虫-1688官网自动以图搜图
- C#下实现的K-Means优化[1]-「离群点检测」
- 搭建Kafka集群环境
- Linux哈希表数组,开地址哈希表(Hash Table)的接口定义与实现分析
- Go 标准库介绍五: io
- 2019年下半年教师资格中学《综合素质》真题与参考答案
- Java网络编程入门(软件结构、网络通信协议、网络编程三要素)
- 组合逻辑电路的分析与设计
- 统计学和计算机的关系,浅议统计学与其他学科的关系
- 交换机和集线器的区别
- Linux学习笔记——~/.bash_profile文件
- vue 嵌套表格组件_vue+element-ui实现嵌套表格导出
- 基于ResNet50网络的简单垃圾分类网络
- Kafka入门经典教程
- windows debug tools
- matlab 地质学,大类学子有话说 | 地球科学与工程学院:探寻地球的奥秘
热门文章
- 使用CAJViewer 提取PDF文件中的文字
- logstash filter 处理json数据按原始数据字段数据存储
- Openlayer4 - 最好最强大的开源地图引擎
- Linux系统下授权MySQL账户访问指定数据库和数据库操作
- PartyUs 待添加内容(不定期更新)
- eax ...edi esp ebp寄存器简介(转)
- java输入框1-100_Java开发笔记(一百三十九)JavaFX的输入框
- mysql读写分离的含义_mysql的读写分离问题剖析
- 末日博士:比特币不应出现在散户或机构投资者的投资组合中
- SAP License:SD应用要点