VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > c#编程 >
  • c#教程索引

1.[]
      c#教程索引提供[ ] 类的语法
       总是一个实例成员,可以是虚拟的
       没有ref/out 参数
struct StringSection
{
    ...
    public char this [int at]
    {  
        ...
    }
    ...
}
StringSection cord("csharp", 2, 6);
...
char first = cord[0];    // 'h'
...
Console.WriteLine(cord); // harp
索引的声明包括:可选的访问修饰符(例子中是public),返回值的类型(char),关键字this(不能省略),和函数参数类似的参数(不过是方括号,而不是函数的圆括号),然后是索引体。你不能使用静态索引,所以你不能在索引的声明中使用static关键字。
索引可以被声明为虚拟的,因此它可以在它的派生类中被重载。
索引的参数不能使用ref/out型参数。例如:
              struct StringSection
              {
                     public char this [ref int at]//错误
                     ...
              }
2.  c#教程读和写
       索引只能包含下列语句
       get {  } 用来读
       set {  } 用来写
struct StringSection
{
    ...
    public char this [int at]   
    {  

        get { return ...; }
        set { ... = value; }
    }
    ...
}
cord[3] = 'e';
if (cord[3] == 'e') ...
索引的声明和属性一样:只能含有set/get语句。
当使用一个索引表达式进行读操作时,索引的get语句自动运行,例如在上面的例子中,表达式:
              cord[3] == 'e'
系统会自动调用索引的get语句(3传递给索引的整型参数),返回一个char型值,这个char型值然后和'e'进行比较。
当使用一个索引表达式进行写操作时,索引的set语句自动运行,例如在上面的例子中,表达式:
              cord[3] = 'e'
系统会自动调用索引的set语句(3传递给索引的整型参数),set语句可以取得表达式右边的值,它是通过value这个“关键字”来获得的。
3.  c#教程只读或只写
        只有get 语句的索引是
       只读索引
        只有set 语句的索引是
       只写索引
struct StringSection
{
    ...
    public char this [int at]
    {  
        get { return ... }
    }
    ...
}
StringSection cord("csharp", 1, 6);
...
if (cord[4] == 'k') {
    cord[4] = 'k'; //错误
}
 
4.索引vs.数组
       索引和数组的比较     
       索引可以使用非整型参数
       索引可以被重载
       索引可以是私有的
       索引不能有ref/out 型参数
struct Matrix
{
    ...
    public double this [int row, int col]
    {  
        get { ... }
        set { ... }
    }
    public Row this [int row]
    {  
        get { ... }
        set { ... }
    }
    ...
}
5.

 

索引vs.属性
       索引和属性的比较
       都只有 get set 语句
       没有静态索引
        可以有静态属性
       索引是在类的层次上声明的
       

 

 属性是在字段的层次上声明的
struct Row
{
    ...
    public double this [int col]
    {  
        get { ... }
        set { ... }
    }
    public int Length
    {  
        get { ... }
    }
    ...
}
属性和索引都能在接口中声明。
              interface IRow
              {
                     double this [int index] { get; set; }
                     int Length { get; }
              }
6.索引vs.函数
       索引和函数的比较
       函数可以没有参数
       函数可以有void型返回值
       索引只能包含get/set语句
 
 
 
 


相关教程