欢迎光临散文网 会员登陆 & 注册

c#索引器学习

2021-10-18 01:19 作者:柯昌弟弟c  | 我要投稿

索引器:

索引器允许类或结构的实例就像数组一样进行索引。 无需显式指定类型或实例成员,即可设置或检索索引值。 索引器类似于属性,不同之处在于它们的访问器需要使用参数。

以下示例定义了一个泛型类,其中包含用于赋值和检索值的简单 get 和 set 访问器方法。 Program 类创建了此类的一个实例,用于存储字符串。

输出:Hello, World

(    

        在c#6.0可以 使用 

        public T this[int i] => arr[i];

        =>引入了表达式主体,可以不使用get关键字

        日常中使用,发现底层多数是数组实现,现在都用泛型List等封装好的方法

技巧:

1.在定义索引器的时候,不一定只采用一个参数,同一类中还可以拥有一个以上的索引器,也就是重载。
2.索引器的参数可以采用任何类型,不过int是最为合理的类型。

属性和索引器差别

 1.类的每一个属性都必须拥有唯一的名称,而类里定义的每一个索引器都必须拥有唯一的签名(signature)或者参数列表(这样就可以实现索引器重载)。 

 2.属性可以是static(静态的)而索引器则必须是实例成员。 

 3.为索引器定义的访问函数可以访问传递给索引器的参数,而属性访问函数则没有参数。 

接口(interface):

类似数组的行为常受到程序实现者的喜爱,所以你还可以为接口定义索引器,IList和 IDictionary集合接口都声明了索引器以便访问其存储的项目。  在为接口声明索引器的时候,记住声明只是表示索引器的存在。你只需要提供恰当的访问函数即可,不必包括范围修饰符。以下代码把索引器声明为接口IImplementMe的一部分:

interface IImplementMe {  string this[int index]  {  get;  set;  } 

相应实现的类则必须为IimplementMe的索引器具体定义get和set访问函数。 


(大部分内容来自https://docs.microsoft.com/的C#API文档)

最开始接触索引器是来自同事,但是使用之后(个人感想)我觉得索引器并不能在多数场合下使用,在实际的这次使用中也发现逻辑不通顺的情况,所以重新在学习一下。

c#索引器学习的评论 (共 条)

分享到微博请遵守国家法律