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) 应用程序中的典型对象会接到各种各样不同的请求:有要求绑定到 ...
随机推荐
- Tensorflow搞一个聊天机器人
catalogue . 前言 . 训练语料库 . 数据预处理 . 词汇转向量 . 训练 . 聊天机器人 - 验证效果 0. 前言 不是搞机器学习算法专业的,3个月前开始补了一些神经网络,卷积,神经网络 ...
- CentOS 网络设置
CentOS 网络设置有两种方式配置网络可以连接外网: 自动分配与手动设置Ip 一,自动分配ip: 新装的centos6.0,用ifconfig只显示ifcfg-lo的信息,可以用ifup eth0的 ...
- 【SQL】SqlServer中Group By后,字符串合并
参考: 1.SQL查询语句 group by后, 字符串合并 2.sql for xml path用法 #需求: 合并列值 表结构,数据如下: id value ----- ------ aa bb ...
- input:checked + label用法
input:checked ~ label :相邻同胞选择器,选择被选中的input标签后 所有的label标签[input 和 label标签有共同的父元素]: input:checked + ...
- jquery load 陷阱【原】
基础写法 function load(targetId,templateName) { $("#"+targetId).load(contextPath+templateName) ...
- golang使用redis
redigo使用 手册地址:http://godoc.org/github.com/garyburd/redigo/redis github地址:https://github.com/garyburd ...
- 020、搭建本地Registry(2019-01-11 周五)
参考https://www.cnblogs.com/CloudMan6/p/6902325.html Docker Hub 虽然方便,但还是有些限制,比如 1.需要Internet连接,上 ...
- 调用wait的SIGCHLD信号处理函数
#include <stdio.h> #include <sys/wait.h> void sig_chld(int signo) { pid_t pid; int stat; ...
- interactivePopGestureRecognizer --- iOS侧滑的问题
苹果一直都在人机交互中尽力做到极致,在iOS7中,新增加了一个小小的功能,也就是这个api:self.navigationController.interactivePopGestureRecogni ...
- GCC编译器原理(二)------编译原理一:目标文件
一.目标文件 在 UNIX® 和 Linux® 中,任何事物都是文件.UNIX 和 Linux 编程实际上是编写处理各种文件的代码.系统由许多类型的文件组成,但目标文件具有一种特殊的设计,提供了灵活和 ...