浅谈在C#开发中运用到的索引器
来源:互联网 发布:便签软件 编辑:程序博客网 时间:2024/06/03 01:42
索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。
属性
在C#语言中有两种属性方法,其一是get,通过它可以返回私有域的值,其二是set,通过它就可以设置私有域的值。比如说,以下面的代码为例,其间创建了一个FirstName属性,由它控制对私有类成员firstname的访问:
private string firstname;
public string FirstName {
get {return firstname;}
set {firstname = value;}
}
}
属性声明可以如下编码:
Person p = new Person();
p.FirstName = "Lamont";
Console.WriteLine (p.FirstName);
如你你所看到的那样,属性声明倒更像是域声明,只不过它还声明了两个特殊的成员,按照微软的说法就是所谓的访问函数(accessor)。
当某一表达式的右边调用属性或者属性用作其他子程序(或者函数)的参数时即会调用get访问函数。
反之,当表达式左边调用属性并且通过隐式传递value参数设置私有域值的情况下就会调用set访问函数。你可以创建只读属性,方法是省略set访问函数,这样任何设置属性的尝试都会产生编译错误。
索引器使得对象可按照与数组相似的方法进行索引。
get 访问器返回值。set 访问器分配值。
this 关键字用于定义索引器。
value 关键字用于定义由 set 索引器分配的值。
索引器不必根据整数值进行索引,由您决定如何定义特定的查找机制。
索引器可被重载。
索引器可以有多个形参,例如当访问二维数组时。
采用索引器的益处
其实,这是因为类的索引器非常像属性,从代码上看也是这样。以下是具有索引器的类示例,通过索引器会返回一个字符串:
public string this [int index] {
get {return "You passed " + index; }
}
}
注意,这里的属性名是this,意思是回引类的当前实例,参数列表包含在方括号而非括号之内。还有,这是一个只读索引器。为了把它改成读/写类型,我又添加了一个set访问函数。在定义索引器的时候,你不一定只采用一个参数。索引器参数可以采用任何类型,不过int是通常采用也是最为合理的类型。同一类中还可能拥有一个以上的索引器(重载)。
如上定义了Sample类之后,我们就可以把索引器用作某种默认的属性,如下所示:
Sample s = new Sample();
Console.WriteLine(s[55]);
属性和索引器
属性和索引器之间有好些差别:
类的每一个属性都必须拥有唯一的名称,而类里定义的每一个索引器都必须拥有唯一的签名(signature)或者参数列表(这样就可以实现索引器重载)。
属性可以是static(静态的)而索引器则必须是实例成员。
为索引器定义的访问函数可以访问传递给索引器的参数,而属性访问函数则没有参数。
接口
类似数组的行为常受到程序实现者的喜爱,所以你还可以为接口定义索引器,IList和 IDictionary集合接口都声明了索引器以便访问其存储的项目。
在为接口声明索引器的时候,记住声明只是表示索引器的存在。你只需要提供恰当的访问函数即可,不必包括范围修饰符。以下代码把索引器声明为接口IImplementMe的一部分:
interface IImplementMe {
string this[int index]
{
get;
set;
}
相应实现的类则必须为IimplementMe的索引器具体定义get和set访问函数。
-------------------------------------------------------------------------------------------------------------------------------------------------
使用索引器
索引器允许您按照与数组相同的方式对类、结构或接口进行索引。有关对接口使用索引器的更多信息,请参见接口索引器。
要声明类或结构上的索引器,请使用 this 关键字,如下例所示:
public int this[int index] // Indexer declaration{ // get and set accessors}
备注索引器类型及其参数类型必须至少如同索引器本身一样是可访问的。有关可访问级别的更多信息,请参见访问修饰符。
索引器的签名由其形参的数量和类型组成。它不包括索引器类型或形参名。如果在同一类中声明一个以上的索引器,则它们必须具有不同的签名。
索引器值不归类为变量;因此,不能将索引器值作为 ref 或 out 参数来传递。
要为索引器提供一个其他语言可以使用的名字,请使用声明中的 name 属性。例如
[System.Runtime.CompilerServices.CSharp.IndexerName("TheItem")]public int this [int index] // Indexer declaration{
//此索引器将具有名称 TheItem。不提供名称属性将生成 Item 默认名称。}
- 浅谈在C#开发中运用到的索引器
- 在实际软件开发中运用到的工具
- 浅谈C# 索引器
- 软件开发中运用到的编号
- 软件开发中运用到的编号
- 软件开发中运用到的编号
- 软件开发中运用到的编号
- 在C#中运用 SQLite
- 浅谈C#从入门到开发需要掌握的技术
- 浅谈正则表达式在.net的运用-C#程序抓取网页信息
- Android开发之浅谈广播的运用
- 在软件开发中,反证方法的典型运用
- 在软件开发中,推理的典型运用
- C#中TIMER的运用
- C#中委托的运用
- C#中Socket的运用
- C#中split的运用
- C#中XML的运用
- 无题
- 如何才能将企业现有的组织关系集成到jbpm中?
- 关于VS2005与EVC4.2的项目开发过程中的问题点滴
- 寻找随机数
- mysql的几种超实用技巧
- 浅谈在C#开发中运用到的索引器
- 在delphi中调用excel有四种方式
- 知道你的浏览器有这个功能吗
- 和同事相处的30个原则(转载)
- java基础项目
- 关注Groovy,也许是领域建模语言的新生力量
- 五大法则构筑“人才金字塔”-微软中国研发集团的管理和文化
- Axis开发Web Service实例
- Trufun Kant 2007将同时集成eclipse3.2和vs.net2005