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) 应用程序中的典型对象会接到各种各样不同的请求:有要求绑定到 ...
随机推荐
- MapReduce框架原理-MapTask工作机制
MapReduce框架原理-MapTask工作机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. maptask的并行度决定map阶段的任务处理并发度,进而影响到整个job的处理速 ...
- nGrinder TestRunner http post json
s nGrinder学习笔记 — post请求 https://blog.csdn.net/meyoung01/article/details/50435881 import HTTPClient.H ...
- JAVA核心技术I---JAVA基础知识(常量设计和常量池)
一:常量---一种不会修改的变量 –Java没有constant关键字 –不能修改,final –不会修改/只读/只要一份,static –方便访问publicJava中的常量 –public sta ...
- powershell 中常用cmd,unix命令(get-alias)
powershell 中常用cmd,unix命令(get-alias) Get-Content Alias cat -> Get-Content Alias gc -> Get-Conte ...
- MVC的了解
MVC是一种架构模式,程序分层,分工合作,各层既相互独立,有协同工作. MVC:Model+View+Controller Model层:业务数据的信息表示,关注支撑业务的信息构成,通常是多个业务实体 ...
- lucene相关
lucene相关: 应用领域: 互联网全文检索引擎(比如百度, 谷歌, 必应) 站内全文检索引擎(淘宝, 京东搜索功能) 优化数据库查询(因为数据库中使用like关键字是全表扫描也就是顺序扫描算法 ...
- Python 连接MongoDB并比较两个字符串相似度的简单示例
本文介绍一个示例:使用 pymongo 连接 MongoDB,查询MongoDB中的 字符串 记录,并比较字符串之间的相似度. 一,Python连接MongoDB 大致步骤:创建MongoClient ...
- Sql显示16进制
select cast(id as varbinary(4)) from tableTest
- C++ WString与String互相转换
std::wstring StringToWString(const std::string& str) { , str.c_str(), -, NULL, ); wchar_t *wide ...
- SQL行列转置
今天给公司同事们出了一道例行考试题,要求写一句SQL语句从上面表转换为下面表,经过艰难思索,一个同事做了出来. 小区 总数 A类车 B类车 C类车建业森林半岛 2 ...