朋友们,还记得我们在C#语言开发中用到过索引器吗?

记得在获得DataGridView控件的某列值时:dgvlist.SelectedRows[0].Cells[0].Value;

记得在获得ListView控件的某列值时:listView1.SelectedItems[0].SubItems[0].Text;

记得在读取数据库记录给变量赋值时:result=dr["StudentName"].ToString();

记得Dictionary中根据key值来获取Value值时:dic["key"]等等

我们只知道索引器给我们解决了许多问题,带来了许多方便,但你知道它的原理所在吗?

01.C#中的类成员可以是任意类型,包括数组和集合。当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作。

02.定义索引器的方式与定义属性有些类似,其一般形式如下:

[修饰符] 数据类型 this[索引类型 index]

{

get{//获得属性的代码}

set{ //设置属性的代码}

}

03.索引器的本质是属性

下面我们以一个例子来了解索引器的用法和原理:

01.创建一个Test类,里面定义一个数组和一个索引器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 索引器
{
public class Test
{
//01.首先定义一个数组
private string[] name=new string[]; //02.根据创建索引器的语法定义一个索引器,给name数组赋值和取值
public string this[int index]
{
get { return name[index]; }
set { name[index] = value; }
} }
}

02.在Main方法中通过索引器给Test类中的数组赋值

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 索引器
{
class Program
{
static void Main(string[] args)
{
//01.首先你得实例化Test类的对象
Test test=new Test();
//02.利用索引器给Test类中的数组赋值
test[] = "张总";
test[] = "吴总";
//03.打印查看效果
for (int i = ; i < ; i++)
{
Console.WriteLine(test[i]);
}
Console.ReadLine();
}
}
}

03.效果如下:

这样就是索引器的应用

上面说到

索引器的本质是属性

是的,我们可以发现上面定义索引器的代码的IL(中间语言)是(属性的格式):

这就是索引器

C#中的索引器原理的更多相关文章

  1. Typescript中的装饰器原理

    Typescript中的装饰器原理 1.小原理 因为react中的高阶组件本质上是个高阶函数的调用, 所以高阶组件的使用,我们既可以使用函数式方法调用,也可以使用装饰器. 也就是说,装饰器的本质就是一 ...

  2. C#中的索引器的简单理解和用法

    索引器是一种特殊的类成员,它能够让对象以类似数组的方式来存取,使程序看起来更为直观,更容易编写. 1.索引器的定义 C#中的类成员可以是任意类型,包括数组和集合.当一个类包含了数组和集合成员时,索引器 ...

  3. C#中的索引器(Indexers)

    前两天刚刚学习完了属性,这两天又搂完了索引器,发现两者非常的相似,但是相似之外还有一些不同之处.今天就来总结一下索引器--Indexers 索引器的作用及格式 索引器的作用就是能够使类或者结构体的实例 ...

  4. Ceph对象存储网关中的索引工作原理<转>

    Ceph 对象存储网关允许你通过 Swift 及 S3 API 访问 Ceph .它将这些 API 请求转化为 librados 请求.Librados 是一个非常出色的对象存储(库)但是它无法高效的 ...

  5. C#中的索引器

    在Java中,一般会这样使用get,set方法: class Person{ private String name; public void setName(String name){ this.n ...

  6. C# 接口中的索引器

    索引器可在 接口(C# 参考) 上声明.接口索引器的访问器与类索引器的访问器具有以下方面的不同: 接口访问器不使用修饰符. 接口访问器没有体. 因此,访问器的用途是指示索引器是读写.只读还是只写.以下 ...

  7. 描述一下C#中索引器的实现过程,是否只能根据数字进行索引?

    不是.可以用任意类型. 索引器是一种特殊的类成员,它能够让对象以类似数组的方式来存取,使程序看起来更为直观,更容易编写. 1.索引器的定义 C#中的类成员可以是任意类型,包括数组和集合.当一个类包含了 ...

  8. C# 中常用的索引器

    使用 C# 中的索引器和 JavaScript 中访问对象的属性是很相似. 之前了解过索引器,当时还把索引器和属性给记混了, 以为索引器就是属性,下面写下索引器和属性的区别,以及怎么使用索引器 先说明 ...

  9. C# 索引器,实现IEnumerable接口的GetEnumerator()方法

    当自定义类需要实现索引时,可以在类中实现索引器. 用Table作为例子,Table由多个Row组成,Row由多个Cell组成, 我们需要实现自定义的table[0],row[0] 索引器定义格式为 [ ...

随机推荐

  1. Visual Studio 2013开启JavaScript的智能提示功能

    在前一次的发布的时候,我们共享了Visual Studio 2013中Windows Azure移动服务的集成和功能.其中包含了移动服务表脚本的编辑能力的介绍.这一次的发布,我们将描述在Visual ...

  2. 注意Activator.CreateInstance两个重载方法的性能

    今天扩展一个Type的扩展方法New: public static object New(this Type type, params object[] args) { Guard.ArgumentN ...

  3. 【翻译】C# Tips & Tricks: Weak References - When and How to Use Them

    原文:C# Tips & Tricks: Weak References - When and How to Use Them Sometimes you have an object whi ...

  4. 数据可视化(5)--jqplot经典实例

    本来想把实例也写到上篇博客里,最后发现太长了,拆成两篇博客了. 实例来源于官方文档:http://www.jqplot.com/tests/ 这篇博客主要是翻译了官方文档关于经典实例的解说,并在相应代 ...

  5. Python单元测试框架之pytest -- 断言

    对于测试来讲,不管是功能测试,自动化测试,还是单元测试.一般都会预设一个正确的预期结果,而在测试执行的过程中会得到一个实际的结果.测试的成功与否就是拿实际的结果与预期的结果进行比较.这个比的过程实际就 ...

  6. .NET 产品版权保护方案 (.NET源码加密保护) (转载)

    说 明:你希望自己用.net辛辛苦苦做出来的软件被人轻易破解吗?你希望自己花了大量人力物力用.net开发出来的产品被竞争对手轻易获取核心代码吗?这是 一篇比较详尽地介绍如何保护自己的.net源代码的文 ...

  7. 经典设计:30个另类的 404 not found 页面设计

    404页面是每个网站必不可少的一部分.我们在网络上能看到很多创意的404错误页面.在这篇文章中,我挑选了30个充满灵感和启发性的404页面设计的例子.Web 设计师们花精力设计一个另类的自定义的404 ...

  8. Java异步回调

      作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) 1.开始讲故事: 午饭的时候到了,可是天气太冷,根本不想出办公室的门,于是你拨通了某饭店的订餐电话“喂!你好 ...

  9. 《你不知道的javascript》一、函数作用域和块作用域

    函数中的作用域 所谓函数作用域,就是属于这个函数的全部变量都可以在整个函数的范围内使用及复用. function foo(a) { var b=a; function bar(c){ var c=b* ...

  10. EPANET源码中用到的几个简单C语言函数介绍三

    引自input2.C int  getfloat(char *s, double *y)/***---------------------------------------------------- ...