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) 应用程序中的典型对象会接到各种各样不同的请求:有要求绑定到 ...
随机推荐
- java基本类型及其相互转换
1.基本数据类型 java中是采用Unicode编码的,其一个字符占用两个字节,故java中字符char可以存储一个中文汉字 整数默认是int类型,浮点数默认是double类型 在定义long类型的变 ...
- linq总结系列(一)---基础部分
一.linq的基本概念 LINQ是C#和VB中的统一查询语法,使用对象来保存和检索来自不同来源(如数据库.xml.对象集合)的数据. 主要功能:消除了编程语言和数据库之间的不匹配,以及为不同类型的数据 ...
- Web API中的内容协商
一.内容协商的概念 HTTP规范将内容协商定义为“当有多个格式可用时为给定响应选择最佳格式的过程”.HTTP中内容协商的主要机制是这些请求标头: Accept:响应可接受哪些媒体类型,例如“appli ...
- redis注册成window服务 标签: redis
注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 开启服务 ...
- python --端点调试
python端点调试 左边三角:快速跳到下一个端点 下箭头:单不调试 斜向下箭头:跳到函数内部执行代码
- es6 javascript对象方法Object.assign() 对象的合并复制等
Object.assign方法用于对象的合并,将源对象( source )的所有可枚举属性,复制到目标对象( target ). 详细使用稳步到前辈: http://blog.csdn.net/qq_ ...
- string.GetHashCode获取值不一样
今天在使用程序时发现两个String.GetHashCode值不一样,通过测试 (1)程序在两台不同的计算机上运行,没有变化. (2)修改32位,64位,值有变化,说明GetHashCode和.net ...
- 12.scrapy框架
一.Scrapy 框架简介 1.简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个 ...
- js call使用
call 方法 请参阅 应用于:Function 对象 要求 版本 5.5 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[, [,.argN ...
- Java SE之XML<一>XML文档规约
[文档整理系列] Java SE之XML<一>XML文档规约 1.xml文档引用: 1.外部私有DTD: <!DOCTYPE rootNodeName SYSTEM "ur ...