《Inside C#》笔记(六) 属性、数组、索引器
一 属性
a) 属性可用于隐藏类的内部成员,对外提供可控的存取接口。属性相当于有些语言的getter、setter方法,只是使用起来更加方便一点,而且查看对应的IL码可以看到,属性的本质也确实是方法。
b) 通过只提供get,可以让属性只读。只写属性也可以,但没有用过。
c) 属性除了用来控制对类成员的访问外,还可以在get或set的时候通过编码进行一些附加的动作。
d) 属性也可以被继承、重写。
二 数组
a) 在C#中,所有数组都继承自System.Array类。数组也是对象,所以声明的数组在使用前必须实例化。
b) 数组的Length属性指的是数组中所有的元素个数,这一点在多维数组中尤其要注意。如果想取得某一行的元素个数,可以使用.GetLength(<行数>)方法。通过Rank属性可以取得数组的维数。
c) 不规则数组(Jagged Array),不规则数组的元素是数组,每个数组的维数和长度可以不相同。声明方式如下:

C语言用类似这样的方式来声明多维数组,但C#声明多维数组的方式为:

要避免混淆。
三 索引器
a) 通过索引器可以像使用数组一样使用类成员。索引器与属性类似,都提供对类成员的某种操作方式。
b) 索引器的声明方式与属性略微有差别,主要在于索引器的名称只能是this,因为要把类名称当作数组来使用,所以不能有另外的名称

c) 索引器可以有重载,使用不同的参数组合来设置不同的索引方式。另外,据说索引器不能是静态的,本来想着将被索引内容也声明为静态就可以,但试了一下还确实不行,网络上有人的解释是:CLR支持静态索引器,但C#不支持。
d) 要注意索引器的使用场合(目前菜鸟的我还没遇到适合的场合),在恰当的地方使用可以带来方便,但对索引器的滥用却会带来各种问题,比如可读性的降低,invoice.Name显然是比invoice[2]直观的。
《Inside C#》笔记(六) 属性、数组、索引器的更多相关文章
- (转)c# 属性与索引器
属性是一种成员,它提供灵活的机制来读取.写入或计算私有字段的值. 属性可用作公共数据成员,但它们实际上是称为“访问器”的特殊方法. 这使得可以轻松访问数据,还有助于提高方法的安全性和灵活性. 一个简单 ...
- C#中方法,属性与索引器
C#中方法,属性与索引器: TODO: 1,关于系统中常常出现的通过某一字段,查询相应实体信息(可能是一条字段或一条数据和一组泛型集合) 解说篇:1,方法,2,属性3.索引器 1.方法(1.依据状态编 ...
- C#学习笔记(十六):索引器和重载运算符
二维数组如何映射到一维数组 重载运算符 1.算术运算符 2.关系运算符, < 和 > 成对重载 using System; using System.Collections.Generic ...
- javaScript数组的三种属性—数组索引、数组内置属性、数组自定义属性
JS数组也是一种对象. 我们用JavaScript处理的所有东西,都可以视为是一种对象. JavaScript中有两种数据类型,基本类型数对象类型,但是基本类型基本都是包括在对象类型之中的. 数组.函 ...
- set,get方法(属性,索引器)
很多时候我们不可以把一些字段暴露出来允许别人调用和修改,为了隐藏这些字段又便于加限制的使用,在面向对象编程中一般采用写get set函数的办法,比如: //字段_age, "_"表 ...
- Elasticsearch笔记六之中文分词器及自定义分词器
中文分词器 在lunix下执行下列命令,可以看到本来应该按照中文"北京大学"来查询结果es将其分拆为"北","京","大" ...
- C# to il 9 Properties and Indexers(属性和索引器)
A field is simply a memory location, whereas, a property is a collection of methods. Aproperty is re ...
- 接口、索引器、Foreach的本质(学习笔记)
接口 什么是接口? 接口代表一种能力,和抽象类类似但比抽象类的抽象程度更高! 接口的定义: public interface IEat//定义一个接口 { void Eat(string food); ...
- C#属性-索引器-里氏替换-多态-虚方法-抽象-接口-泛型-
1.属性 //属性的2种写法 public class person { private string _name; public string Name { get { return _name; ...
随机推荐
- LabVIEW(十):数组和簇
一.数组 1.创建数组 (1).前面板右键>“数组.矩阵与簇”>数组. (2).前面板右键>(选择要添加的数组数据类型,比如创建数值数组)数值>将“数值输入控件”拖入数组中. ...
- Swift5 语言指南(十) 枚举
一个枚举定义了一个通用型的一组相关的值,使你在你的代码中的一个类型安全的方式这些值来工作. 如果您熟悉C,您将知道C枚举将相关名称分配给一组整数值.Swift中的枚举更灵活,并且不必为枚举的每个案例提 ...
- jvm-垃圾回收gc简介+jvm内存模型简介
gc是jvm自动执行的,自动清除jvm内存垃圾,无须人为干涉,虽然方便了程序员的开发,但同时增加了开发人员对内存的不可控性. 1.jvm内存模型简介 jvm是在计算机系统上又虚拟出来的一个伪计算机系统 ...
- android UI:Fragment碎片
碎片(Fragment) 嵌入与活动中的UI片段,为了合理的分配布局而存在,这是我的简单理解.多用于兼顾手机与平板的UI,也适用于灵活高级的UI制作. Demo 简单的按键切换两片不同的Demo 新建 ...
- Hadoop RPC源码分析
Hadoop RPC源码分析 上一篇文章http://www.cnblogs.com/dycg/p/rpc.html 讲了Hadoop RPC的使用方法,这一次我们从demo中一层层进行分析. RPC ...
- Java-jacob-文件转HTML
Java-jacob-文件转HTML: 下载jacob的jar包,然后举个例子. public static final int WORD_HTML = 8; public static final ...
- Spring Security使用报错 No bean named 'springSecurityFilterChain' is defined
今天配置spring security时,运行报出No bean named 'springSecurityFilterChain' is defined错误,报错信息如下 严重: Exception ...
- bigdata-01-应用
1, 基本概念 在互联网技术发展到现今阶段,大量日常.工作等事务产生的数据都已经信息化,人类产生的数据量相比以前有了爆炸式的增长,以前的传统的数据处理技术已经无法胜任,需求催生技术,一套用来处理海量数 ...
- 自己动手实现java数据结构(四)双端队列
1.双端队列介绍 在介绍双端队列之前,我们需要先介绍队列的概念.和栈相对应,在许多算法设计中,需要一种"先进先出(First Input First Output)"的数据结构,因 ...
- mysql真的不能做搜索引擎吗?
大家都对电商的商品查询并不陌生,比如我们想根据商品名称查询所有商品信息. 有些技术的童鞋第一念头是搜索引擎:有些技术的童鞋第一念头是模糊查询,如like?(如果商品信息存放到mysql里,我们一般使用 ...