C# 4.0新特性-索引属性
2010-09-30 22:35:20 来源:WEB开发网为什么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];
}
}
- ››索引色在Photoshop中的制作方式
- ››索引覆盖和DB2查寻性能
- ››索引存储关系到数据库的运行效率
- ››索引在ORACLE中的应用分析
- ››特性信息
- ››属性选择符Attribute Selectors
- ››索引分析和优化解决方案
- ››索引视图
- ››索引性能优化实例
- ››属性列表的开发
- ››属性的提取
- ››属性的编辑
更多精彩
赞助商链接