2 / 2 / 2
Регистрация: 11.09.2013
Сообщений: 165
|
|||||||||||
1 | |||||||||||
Как работают индексаторы?02.04.2014, 20:50. Показов 1916. Ответов 4
Метки нет (Все метки)
Здравствуйте дорогие друзья!
Изучаю Книгу Герберта Шилдта. Остановился на индексаторах. И никак не могу понять принцип работы. Вот программка которая должна выводить ошибки если превышен размер массива.
на деле же компилятор выводит fs[0]-ошибки fs[1]-ошибки fs[2]-ошибки fs[3]-ошибки fs[4]-ошибки fs[5]-ошибки fs[6]-ошибки fs[7]-ошибки fs[8]-ошибки fs[9]-ошибки Блин да почему так то? В книги этот момент не описывается. Если в конце изменить не много цикл вот так.
fs[0] fs[1] fs[2] fs[3] fs[4] fs[5]-ошибки fs[6]-ошибки fs[7]-ошибки fs[8]-ошибки fs[9]-ошибки Ребят обьясните нубу как работа.т эти индексаторы не могу двигаться дальше
0
|
02.04.2014, 20:50 | |
Ответы с готовыми решениями:
4
Индексаторы. как заполнить массив нулями Как реализовать доступ используя индексаторы? Не работают задние USB а передние работают как по маслу в чем дело. Индексаторы в С# |
53 / 53 / 10
Регистрация: 26.09.2013
Сообщений: 277
|
||||||
02.04.2014, 21:50 | 2 | |||||
в Шилдте все части данной программы объясняются очень подробно.
0
|
2 / 2 / 2
Регистрация: 11.09.2013
Сообщений: 165
|
|
03.04.2014, 08:28 [ТС] | 3 |
Этот пример я прорешал, но не понял суть: вот для наглядности не много измененная программа которую я опубликовал в пером посте, теперь она выводит номер индекса:
Код
using System; class failsoftDemo { int[] a; int len; bool errflag; public int t; public failsoftDemo(int size) { a = new int[size]; len = size; } public int Lenght { get { return len; } set { len = value; } } public bool Error { get { return errflag; } } public int this[int index] { get { if (ok(index)) { errflag = false; t = index; return a[index]; } else { errflag = true; t = index; return 0; } } set { if (ok(index)) { a[index] = value; t = index; errflag = false; } errflag = true; t = index; } } private bool ok(int index) { if ((index >= 0) & (index < Lenght)) return true; else return false; } } class fsdemo { static void Main() { failsoftDemo fs = new failsoftDemo(5); int x; Console.WriteLine(); for (int i = 0; i < fs.Lenght * 2; i++) { fs[i] = i; Console.WriteLine(fs.t); if (fs.Error) Console.WriteLine("fs["+i+"]-ошибки"); else Console.WriteLine("fs[" + i + "]"); } Console.ReadKey(); } } 0 fs[0]-ошибки 1 fs[1]-ошибки 2 fs[2]-ошибки 3 fs[3]-ошибки 4 fs[4]-ошибки 5 fs[5]-ошибки 6 fs[6]-ошибки 7 fs[7]-ошибки 8 fs[8]-ошибки 9 fs[9]-ошибки Дак почему же флаги не срабатывают если явно видно что индекс превысил размер массива???
0
|
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
|
||||||
03.04.2014, 08:48 | 4 | |||||
Сообщение было отмечено Финал как решение
Решение
У вас здесь проблема не в индексаторах. Будем считать, что вы их поняли правильно. Ошибка здесь:
1
|
2 / 2 / 2
Регистрация: 11.09.2013
Сообщений: 165
|
|
03.04.2014, 08:55 [ТС] | 5 |
Ай точно же!!else не написал. Спасибо большое! Вы мне здорово помогли!
0
|
03.04.2014, 08:55 | |
03.04.2014, 08:55 | |
Помогаю со студенческими работами здесь
5
Индексаторы [C#] Индексаторы Индексаторы Индексаторы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |