博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#索引器Indexer
阅读量:6344 次
发布时间:2019-06-22

本文共 1310 字,大约阅读时间需要 4 分钟。

  C#的索引器和C++中重写[]运算符的作用相同.

  如果为类定义一个索引器, 就可以告诉编译器, 如果编译器遇到把类实例当作数组的代码, 该怎么办.

  定义索引器的方式与定义属性的方式一样, 也使用get和set函数, 主要的区别是索引器的名称是关键字this, 要为Vector定义索引器, 就可以修改类的定义, 代码如下:

using
 System;
using
 System.Collections.Generic;
using
 System.Linq;
using
 System.Text;
using
 Microsoft.VisualBasic;
namespace
 CSharp_Text
{
    
struct
 Vector
    {
        
public
 
double
 x, y, z;
        
public
 Vector(
double
 x, 
double
 y, 
double
 z)
        {
            
this
.x 
=
 x;
            
this
.y 
=
 y;
            
this
.z 
=
 z;
        }
        
public
 
override
 
string
 ToString()
        {
            
return
 
"
(
"
 
+
 x 
+
 
"
,
"
 
+
 y 
+
 
"
,
"
 
+
 z 
+
 
"
)
"
;
        }
        
public
 
double
 
this
[
int
 i]
        {
            
get
            {
                
switch
 (i)
                {
                    
case
 
0
:
                        
return
 x;
                    
case
 
1
:
                        
return
 y;
                    
case
 
2
:
                        
return
 z;
                    
default
:
                        
throw
 
new
 IndexOutOfRangeException(
"
Attempt to retrieve Vector element
"
 
+
 i);
                }
            }
            
set
            {
                
switch
 (i)
                {
                    
case
 
0
:
                        x 
=
 value;
                        
break
;
                    
case
 
1
:
                        y 
=
 value;
                        
break
;
                    
case
 
2
:
                        z 
=
 value;
                        
break
;
                    
default
:
                        
throw
 
new
 IndexOutOfRangeException(
"
Attempt to set Vector element
"
 
+
 i);
                }
            }
        }
    }
    
class
 main
    {
        
static
 
void
 Main()
        {
            Vector vect1 
=
 
new
 Vector(
1
-
2
4.1
);
            Vector vect2 
=
 
new
 Vector();
            Console.WriteLine(
"
vect1 = 
"
 
+
 vect1);
            Console.WriteLine(
"
vect1[1] = 
"
 
+
 vect1[
1
]);
            
for
 (
int
 i 
=
 
0
; i 
<
 
3
; i
++
)
            {
                vect2[i] 
=
 i;
            }
            Console.WriteLine(
"
vect2 = 
"
 
+
 vect2);
        }
    }
}

运行结果:

%E7%B4%A2%E5%BC%95%E5%99%A8%E8%BF%90%E8%A1%8C%E7%BB%93%E6%9E%9C.png

  虽然可以用for, do和while循环来处理索引器, 但不能使用foreach循环. 因为foreach循环语句的工作方式不同, 它把元素当作一个集合, 而不是一个数组.

转载地址:http://dmkla.baihongyu.com/

你可能感兴趣的文章
数据对象映射模式(通过工厂模式和注册树模式)v2
查看>>
4939 欧拉函数[一中数论随堂练]
查看>>
MySQL笔记(一)
查看>>
spring boot 包jar运行
查看>>
通过VMWare安装Linux(Ubuntu) 虚拟机在Window10系统和问题解决方案
查看>>
18年秋季学习总结
查看>>
Effective前端1:能使用html/css解决的问题就不要使用JS
查看>>
网络攻防 实验一
查看>>
由莫名其妙的错误开始---浅谈jquery的dom节点创建
查看>>
磨刀-CodeWarrior11生成的Makefile解析
查看>>
String StringBuffer StringBuilder对比
查看>>
.NET与C#
查看>>
在uwp仿制WPF的Window
查看>>
bootstrap随笔点击增加
查看>>
oracle 中proc和oci操作对缓存不同处理
查看>>
[LeetCode] Spiral Matrix 解题报告
查看>>
60906磁悬浮动力系统应用研究与模型搭建
查看>>
指纹获取 Fingerprint2
查看>>
SB阿里云,windows2012r2无法安装.net3.5
查看>>
函数的继承
查看>>