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) 应用程序中的典型对象会接到各种各样不同的请求:有要求绑定到 ...
随机推荐
- linux对4T硬盘进行分区
使用parted工具: yum install parted parted /dev/sdb //选择硬盘 GNUParted 2.3Using /dev/sdbWelcome to GNU Part ...
- C++中string、char *、char[]的转换
头段时间有人问过我这个问题,可是我一点头绪都没有,直接说不会.现在从网上找了点资料,看了看,知道点东西了. 一.string转char*. 主要有三种方法可以将str转换为char*类型,分别是:da ...
- ruby读取exce文件,使用roo---Gem
module SEquipsHelper #设备台账,从excel文件读取信息 require 'roo' #require 'roo-xls' #读取excel文件 # SEquipsHelper. ...
- javasrcipt的作用域和闭包(二)续篇之:函数内部提升机制与Variable Object
一个先有鸡还是先有蛋的问题,先看一段代码: a = 2; var a; console.log(a); 通常我们都说JavaScript代码是由上到下一行一行执行,但实际这段代码输出的结果是2.但这段 ...
- node的优缺点及应用场景
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎(V8引擎执行Javascript的速度非常快,性能非常好) 可以说node是运行在服务器端V8引擎上的Ja ...
- 042、用volume container 共享数据 (2019-03-05 周二)
参考https://www.cnblogs.com/CloudMan6/p/7188479.html volume container 是专门为其他容器提供 volume 的容器,他提供的卷也可以 ...
- Python获取下载速度并显示进度条
#!/usr/bin/python3 # -*- coding:utf-8 -*- import sys import time from urllib import request ''' urll ...
- 常见排序算法之python实现
冒泡排序 简介 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是重复地进行直到没有再需要交 ...
- j2ee应用开发调试工具
j2ee应用程序不能独立运行,需要运行在一个servlet/jsp容器中,常用的servlet/jsp容器如:tomcat,jetty等.在开发调试j2ee程序时,也需要部署在一个指定的容器中.如果每 ...
- 开源框架.netCore DncZeus学习(一)npm安装
今天看到一个不错的开源项目DncZeus, https://github.com/lampo1024/DncZeus 整个界面挺漂亮,而且权限做到了按钮级别,功能也较容易扩展,刚好学习VUE纯看文章很 ...