WEB开发网
开发学院软件开发C语言 C# 4.0新特性-索引属性 阅读

C# 4.0新特性-索引属性

 2010-09-30 22:35:20 来源:WEB开发网   
核心提示: 为什么C#不支持定义索引属性然而,尽管索引属性可以简化代码,C# 4.0新特性-索引属性(2),但是,目前C#对它的支持却极其有限,另外,MSDN上这篇文章也给出了例子,这里我就不给出详细实现,它只能用于C#调用COM中的对象才会出现,你不可以在C#中声明和调用索引属性

为什么C#不支持定义索引属性

然而,尽管索引属性可以简化代码,但是,目前C#对它的支持却极其有限,它只能用于C#调用COM中的对象才会出现,你不可以在C#中声明和调用索引属性。并且其实现并未从编译器或CLR中实现,而仅仅是通过语法糖来简单实现而已。这又是为什么呢?

C# Team给出的答案是C#中对象不同的职责的分离,理由如下:

属性是用来获取对象的,它从属于其父对象。

索引值是用在属性返回的对象中枚举它的,它应该从属于返回的对象而不是属性的父对象。

鉴于这种原因,C#一直不打算在C# 4.0 中实现这个特性,这个新的特性无论是在C# 4.0 language specification还是C# Future page都没有被提到,它看起来更像是C# Team对不得不与COM交互的某种暂时性的妥协而已。实际上照C# Team的想法,他们其实早就给出了他们认为是正确的索引属性的使用方式,读者如果有看VS 2008 目录下的Sample文件夹的话,你可以看到里面有个专门的indexedproperty的例子,在2010 beta2中的Sample中它则变成了Indexers_2,不过两者代码是一样的。另外,MSDN上这篇文章也给出了例子,这里我就不给出详细实现,而给出一个类似的例子。首先我们定义一个带索引器的集合类e.g.

1 public SomeCollection
2 {
3     public int this[int index] { get{//bla} set{//bla} }
4  }
5  public class IndexerTest
6 {
7     public SomeCollection somePropertys{ get; set; }
8     public int[] otherPropertys{get;set;}
9  }

然后你可以这样使用:

class Program
{
      static void main(){
         IndexTest it=new IndexTest();
         int a=it.somePropertys[0];
          int b=it.otherPropertys[0];
       }
}

上一页  1 2 3 4  下一页

Tags:特性 索引 属性

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接