C#入门--索引器
C#入门--索引器
索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。
索引器使得对象可按照与数组相似的方法进行索引。
get 访问器返回值。set 访问器分配值。
this 关键字用于定义索引器。
value 关键字用于定义由 set 索引器分配的值。
索引器不必根据整数值进行索引,由您决定如何定义特定的查找机制。
索引器可被重载。
索引器可以有多个形参,例如当访问二维数组时。
class SampleCollection<T>
{
private T[] arr = new T[];
public T this[int i]
{
get
{
return arr[i];
}
set
{
arr[i] = value;
}
}
} // This class shows how client code uses the indexer
class Program
{
static void Main(string[] args)
{
SampleCollection<string> stringCollection = new SampleCollection<string>();
stringCollection[] = "Hello, World";
System.Console.WriteLine(stringCollection[]);
}
}
在上面的示例中,定义了一个泛型类,并为其提供了简单的 get 和 set 访问器方法(作为分配和检索值的方法)。
属性和索引器之间的比较
索引器与属性类似。除下表中显示的差别外,为属性访问器定义的所有规则同样适用于索引器访问器。
属性 | 索引器 |
允许调用方法,如同它们是公共数据成员。 | 允许调用对象上的方法,如同对象是一个数组。 |
可通过简单的名称进行访问。 | 可通过索引器进行访问。 |
属性的 get 访问器没有参数。 | 索引器的 get 访问器具有与索引器相同的形参表。 |
属性的 set 访问器包含隐式 value 参数。 | 除了 value 参数外,索引器的 set 访问器还具有与索引器相同的形参表。 |
可以为静态成员或实例成员。 | 必须为实例成员。 |
接口中的索引器
接口索引器的访问器与类索引器的访问器具有以下方面的不同:
接口访问器不使用修饰符。
接口访问器没有体。
因此,访问器的用途是指示索引器是读写、只读还是只写。
// 接口索引器
public interface ISomeInterface
{
// 申明索引器
int this[int index]
{
get;
set;
}
} // 继承接口
class IndexerClass : ISomeInterface
{
private int[] arr = new int[];
public int this[int index] // 索引器申明
{
get
{
// 检查索引限制
if (index < || index >= )
{
return ;
}
else
{
return arr[index];
}
}
set
{
if (!(index < || index >= ))
{
arr[index] = value;
}
}
}
} class MainClass
{
static void Main()
{
IndexerClass test = new IndexerClass();
// 通过索引器初始化索引2与5
test[] = ;
test[] = ;
for (int i = ; i <= ; i++)
{
System.Console.WriteLine("Element #{0} = {1}", i, test[i]);
}
}
}
但是,当类使用同一索引器签名实现一个以上的接口时,为避免多义性需要使用完全限定名。例如,如果 Employee 类实现的是两个接口 ICitizen 和 IEmployee,并且这两个接口具有相同的索引器签名,则必须使用显式接口成员实现。即,以下索引器声明:
public string IEmployee.this
{
}
在 IEmployee 接口上实现索引器,而以下声明:
public string ICitizen.this
{
}
在 ICitizen 接口上实现索引器。
提高索引器的安全性和可靠性有两种主要的方法:
当设置并检索来自索引器访问的任何缓冲区或数组的值时,请始终确保您的代码执行范围和类型检查。
应当为 get 和 set 访问器的可访问性设置尽可能多的限制。这一点对 set 访问器尤为重要。
C#入门--索引器的更多相关文章
- 【.net 深呼吸】细说CodeDom(7):索引器
在开始正题之前,先补充一点前面的内容. 在方法中,如果要引用方法参数,前面的示例中,老周使用的是 CodeVariableReferenceExpression 类,它用于引用变量,也适用于引用方法参 ...
- C# 索引器,实现IEnumerable接口的GetEnumerator()方法
当自定义类需要实现索引时,可以在类中实现索引器. 用Table作为例子,Table由多个Row组成,Row由多个Cell组成, 我们需要实现自定义的table[0],row[0] 索引器定义格式为 [ ...
- C#基础回顾(三)—索引器、委托、反射
一.前言 ------人生路 ...
- C#索引器
索引器允许类或者结构的实例按照与数组相同的方式进行索引取值,索引器与属性类似,不同的是索引器的访问是带参的. 索引器和数组比较: (1)索引器的索引值(Index)类型不受限制 (2)索引器允许重载 ...
- C#之索引器
实际中不使用这个东西,只做了解 using System; using System.Collections.Generic; using System.Linq; using System.Text ...
- C#属性-索引器-里氏替换-多态-虚方法-抽象-接口-泛型-
1.属性 //属性的2种写法 public class person { private string _name; public string Name { get { return _name; ...
- 《精通C#》索引器与重载操作符(11.1-11.2)
1.索引器方法结构大致为<modifier><return type> this [argument list],它可以在接口中定义: 在为接口声明索引器的时候,记住声明只是表 ...
- 描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
不是.可以用任意类型. 索引器是一种特殊的类成员,它能够让对象以类似数组的方式来存取,使程序看起来更为直观,更容易编写. 1.索引器的定义 C#中的类成员可以是任意类型,包括数组和集合.当一个类包含了 ...
- C# 索引器使用总结
1.索引器(Indexer): 索引器允许类或者结构的实例按照与数组相同的方式进行索引.索引器类似于属性,不同之处在于他们的访问采用参数. 最简单的索引器的使用 /// <summary> ...
随机推荐
- Install Open vSwitch on CentOS
转载:http://cloud-mate.org/2015/06/installing-open-vswitch-centos-cloudstack/ June 5, 2015 Stuart Ne ...
- weekly contest 115
958. Check Completeness of a Binary Tree Given a binary tree, determine if it is a complete binary t ...
- ObjectARXWizards & AutoCAD .NET Wizards 下载地址
Autodesk Developer Network ObjectARX Wizards The ObjectARX Wizards for AutoCAD 2016 for Visual Stud ...
- 【Python OpenGL】【2】第一个三角形(Pyopengl)
根据顶点缓存来生成图元(Python OpenGL) 原文(英文链接)http://ogldev.atspace.co.uk/www/tutorial03/tutorial03.html __auth ...
- 小程序渲染问题:ios显示安卓不显示
问题描述: 测试库转到正式库后添加数据,小程序数据渲染不出来,但是测试库没问题,ios数据能显示,没问题,但是安卓显示没数据. 排除是服务器https证书问题,如果是证书问题,小程序会直接调不了接口. ...
- Qt 学习之路 2(24):Qt 绘制系统简介
Qt 学习之路 2(24):Qt 绘制系统简介 豆子 2012年10月30日 Qt 学习之路 2 77条评论 Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制.整个绘图系统基于Q ...
- react 的理念
命名式的编程方式: 命名式的编程方式,我们会有百分之六七十都在进行dom的操作. 1.声名式的开发: react是面向数据开发的,react是根据这个数据自动构建这个网站,可以把数据理解成图纸,rea ...
- Django 09 博客小案例
Django 09 博客小案例 urls.py from django.urls import path from . import views urlpatterns = [ path('index ...
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_类型的各种成员
[Class中,可能包含的成员] 常量, 字段, 实例构造器, 类型构造器, 方法, 操作符重载, 转换操作符, 属性, 事件, 类型(Class)
- 奇偶交错排列(DFS)
Description 一个1-n1−n的排列满足所有相邻数字奇偶性不同,那么称该排列为奇偶交错排列. 按字典序输出1-n1−n的所有奇偶交错排列. Input 输入一个整数n( 2 \le n \l ...