C#基础巩固之属性
平常写代码,类中最长用到的字段,属性,方法。虽然经常用属性,但是对属性的认知只是停留在{get;set;}上,也知道可以逻辑判断,只读什么的,没有深入研究;
此篇随笔用来做做属性的文章,加深下认知,文中有讲的不对的地方,还肯请各位批评指正。
Properties:A property is a mechanism that allows a simple, field-like syntax for setting or
querying part of the logical state of a type (static property) or object (instance property) while
ensuring that the state doesn’t become corrupt. Properties can be parameterless (very
common) or parameterfull (fairly uncommon but used frequently with collection classes).
Discussed in Chapter 10, “Properties.”
属性:利用属性(property),可以使用一种简单的,字段风格的语法来设置或查询类型或对象的部分逻辑状态,同时保证状态不遭到破坏。作用于类型的称为静态属性,
作用于对象的成为实例属性。属性是可以没有参数的(这种情况十分普遍),也可以有多个参数(这种情况相当少见,但对于集合类来说很常见)。在第10章”属性“中讨论。
注:此上两段是CLR via C# 书中第六章:Type and Member Basics(类型和成员基础)关于属性的解释。
第十章关于属性介绍的摘录:
1、实现数据的封装,
2、属性不能重载。不能定义名称相同、类型不同的两个属性。定义属性时,通常要同时指定get和set两个方法。但是可以省略set方法来定义一个只读属性(没法设置当然只读),或者
省略get设置一个只写属性。
3、通过属性的get和set方法操作类型内定义的私有字段(通常称为支持字段backing field)。但是,get和set并不是一定要访问支持字段。例如System.Threading.Thread类型提供了一个Priority属性,它可直接与操作系统通信。在Thread对象内部,并没有一个关于线程优先级的字段。没有支持字段的另一个典型属性是运行时计算的只读属性。
4、合理定义属性:属性可以是只读或只写的,字段访问却总是可读和可写的。
5、一个属性方法可能抛出异常,字段访问永远不会跑出异常。
6、如果一个属性的类型实现了IEnumberable或IEnumberable<T>接口,属性就被认定为是一个集合,而集合的初始化是一种相加(additive)操作,而非替换(replacement)操作。
匿名类型:用简结的语法声明一个不可变的元组类型。
var o1 = new
{
Name = "Jenifer",
Year =
};
Console.WriteLine("Name:{0},Year:{1}", o1.Name, o1.Year);
输出:
有参属性:属性的get访问器不接受参数,为无参属性(parameterless property);有参属性(parameterful property),它的get访问器接受一个或多个参数,set访问器接受两个或多个参数。C#称有参属性为索引器,Visual Basic称为默认熟悉。
1、C#使用数组风格的语法来公开有参属性(索引器)。
2、CLR 以相同的方式对待有参和无参属性。编译器会在程序托管集中生成以下两之三项:代表有参属性get访问器的一个方法(只有定义了get访问器方法才回生成),代表有参属性set访问器的一个方法(同get),程序托管集元数据中的一个属性定义。这一项是肯定要生成的。
3、C#将索引器看成是对 [ ] 操作符的一种重载方式,而且 [ ] 操作符不能用来消除具有不同方法名和相同参数集的有参属性的歧义(这后半句不是很理解)。
C#基础巩固之属性的更多相关文章
- 背水一战 Windows 10 (78) - 自定义控件: 基础知识, 依赖属性, 附加属性
[源码下载] 背水一战 Windows 10 (78) - 自定义控件: 基础知识, 依赖属性, 附加属性 作者:webabcd 介绍背水一战 Windows 10 之 控件(自定义控件) 自定义控件 ...
- css基础--常用css属性02
上篇地址:css基础--常用css属性01 本文参考菜鸟教程和w3school 1 浮动和清除浮动 在上篇的第十一节--定位中说道: CSS 有三种基本的定位机制:普通流.浮动和绝对定位. 普通流和 ...
- wpf控件开发基础(5) -依赖属性实践
原文:wpf控件开发基础(5) -依赖属性实践 知识回顾 接上篇,回顾这三篇讲了什么东西 首先说明了属性的现存问题,然后介绍了依赖属性的基本用法及其解决方案,由于依赖属性以静态属性的方式存在,进而又介 ...
- HTML&CSS基础-标签的属性
HTML&CSS基础-标签的属性 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.html源代码 <!-- html 根标签,一个页面中有且只有一个根标签,网页中的 ...
- HTML&CSS基础-边框简写属性
HTML&CSS基础-边框简写属性 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HTML源代码 <!DOCTYPE html> <html> ...
- iOS基础 - 控件属性
一.控件的属性 1.CGRect frame 1> 表示控件的位置和尺寸(以父控件的左上角为坐标原点(0, 0)) 2> 修改这个属性,可以调整控件的位置和尺寸 2.CGPoint cen ...
- C#基础知识回顾-- 属性与字段
今天在公交车上,突然想属性和字段到底有什么区别?很多字段属性都存在 get{}和set{} 和普通的变量没什么区别(可读可写) 我就感觉属性就是给字段一个多的选择方式,有的字段是不允许更改的.. 刚写 ...
- 前端基础-CSS的属性相关设置
一 字体属性 二 文本属性 三 背景属性 四 盒子模型 五 盒子模型各部分详解 一. 字体属性 1.font-weight:文字粗细(表格中*为重点) 取值 描述 normal 默认值,标准粗细 ...
- 【WPF学习笔记】之WPF基础:依赖关系属性和通知
这些天来,对象似乎已经忙得晕头转向了.每个人都希望它们做这做那.Windows® Presentation Foundation (WPF) 应用程序中的典型对象会接到各种各样不同的请求:有要求绑定到 ...
随机推荐
- Hadoop记录-Yarn命令
概述 YARN命令是调用bin/yarn脚本文件,如果运行yarn脚本没有带任何参数,则会打印yarn所有命令的描述. 使用: yarn [--config confdir] COMMAND [--l ...
- 前端基础之JavaScript - day14
写在前面 上课第14天,打卡: 唯心不易,坚持! 参考:http://www.cnblogs.com/yuanchenqi/articles/6893904.html 前言 一个完整的 JavaScr ...
- Java爬网页数据,并存储到本地数据库中
由于开发一个人工智能项目,需要强大的后台数据库加持,所以,没有办法,又是需要医疗数据,只能自己爬某医疗网站数据,进行分析,但是由于不同网站的结构不一样,所以这个程序只能爬该网站的,第一次爬网页数据,自 ...
- event.target解析
event.target返回最初触发事件的DOM对象. Vue例子: main.js methods:{ fan:function(event){ console.log(event.target); ...
- mybatis的两个核心对象SqlSessionFactory和SqlSession对象
mybatis的两个核心对象SqlSessionFactory和SqlSession对象 参见:https://www.cnblogs.com/wxdestiny/p/9743686.html
- visual studio属性管理器
位于 视图->其它窗口 项目配置属性,这个项目的属性别的项目也需要的时候可以把属性页复制到新项目. 以及配置单个项目的不同构建方案
- sap部署
SAP部署 连接sap系统需要通过sap javaconnect来连接,对于sapjco.jar系列文件有32位与64位之分.即对jdk有严格要求.现说明客户端部署及服务端部署两种情况: 一. 部署客 ...
- ES6走一波 Iterator
Iterator---> for ... of 循环 Generator函数原生具有 Iterator接口,所以可采用数组的形式解构赋值
- 帮助类-AD域操作
private static void GetAllUsersInAD() { DirectorySearcher searcher = new DirectorySearcher(); search ...
- lua 语法的使用总结
1.字符串连接 local tmp = "abc" local tmp1 = "ddd" tmp..tmp1 2. table 类型 就是关联数组 local ...