C#索引器所带来的严重冲突,语法是否滥用了中括号“[]”?解决方法
C#索引器所带来的严重冲突,语法是否滥用了中括号“[]”???
如果一个类定义了一个索引器,然后这类又实例化了一个对象数组,就像下面这样:
然后,当我们使用t[5]的时候,C#就分不出这个t[5]是什么了!
索引器的本意是把一个对象的 全部或部分字段 看做一个集合,用数组的方式来使用对象的字段成员,这样当对象本身就是一个数组时岂不引发严重的语法冲突??? 这是否是滥用了数组概念的外延?
我觉得索引器应该使用大括号"{}",而不是使用“[]”,这样既可以避免语法冲突,又可以与数学的习惯相符合,因为在数学里表示一个离散的集合就是以“{}”来表示的,例如{1,3,5,7,9}. 而一个类里面的字段总是一个有限的离散结合。
------解决方案--------------------
我想你没明白问题所在。
问题在于你的test[]中的所有成员都是null。
对于C#来说,定义一个数组并不会导致这个数组的元素已经被初始化。例如:
object[] o = new object[100];
这里的o[0]-o[99]都是null.
必须像你上面的写的test的构造函数中的那样:
如果一个类定义了一个索引器,然后这类又实例化了一个对象数组,就像下面这样:
- C# code
class test { private int[] myint = new int[10]; public string name = "hello world"; public test() { for (int i = 0; i < 10; i++) { myint[i] = i; } } public int this[int n] { get { return myint[n]; } set { myint[n] = value; } } } static void Main(string[] args) { test[] t = new test[10]; Console.WriteLine(t[5]); }
然后,当我们使用t[5]的时候,C#就分不出这个t[5]是什么了!
索引器的本意是把一个对象的 全部或部分字段 看做一个集合,用数组的方式来使用对象的字段成员,这样当对象本身就是一个数组时岂不引发严重的语法冲突??? 这是否是滥用了数组概念的外延?
我觉得索引器应该使用大括号"{}",而不是使用“[]”,这样既可以避免语法冲突,又可以与数学的习惯相符合,因为在数学里表示一个离散的集合就是以“{}”来表示的,例如{1,3,5,7,9}. 而一个类里面的字段总是一个有限的离散结合。
------解决方案--------------------
我想你没明白问题所在。
问题在于你的test[]中的所有成员都是null。
对于C#来说,定义一个数组并不会导致这个数组的元素已经被初始化。例如:
object[] o = new object[100];
这里的o[0]-o[99]都是null.
必须像你上面的写的test的构造函数中的那样:
- C# code
test[] t = new test[10] for(int i =0;i<10;i++)t[i]=new test();
------解决方案--------------------
楼主没明白数组的意思
test[] t1
test t
是两个不一样的东西
t1 其实是Array 而非 test
通过[] 不是调用的索引器