Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для sysrepos
83 / 77 / 30
Регистрация: 08.08.2013
Сообщений: 461
Записей в блоге: 1

Индексатор и поле класса

07.11.2014, 18:12. Показов 2024. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как дописать класс, чтобы можно было задавать значение в объекте и по индексу аксессора и по полю класса?
(если такое возможно)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
    class myakk {
        int[] arr=new int[10];
        public int L=10;
        public bool flag;
        
        public int x;
        public int y;
        
        int[] arrX = new int[10];
        int[] arrY = new int[10];
        
        public int this[int index] {
            get {
                    return arr[index];
                }
            set {
                    arr[index]=value;
                }
        }
    } // myakk
 
 
    class Program
    {
        static void Main()
        {   
            myakk ob = new myakk();
            ob[0]=111;
            ob.x=222;
            
            ob[0].x=444;  //как дописать класс myakk, чтобы можно было так делать???
            ob[1].x=555;  //как дописать класс myakk, чтобы можно было так делать???
            
            Console.WriteLine(ob[0]);
            Console.WriteLine(ob.x);
            
            Console.ReadLine();
        }   //конец Main
    } // конец class
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.11.2014, 18:12
Ответы с готовыми решениями:

Индексатор для класса Vector
3) class Vector { Time arr; ........ } Написать индексатор для класса Vector.

Статическое поле абстрактного класса в как наследуемое поле и преведение его типа
public abstract class BaseManager : BaseClass { public static BaseManager Instance { get; private set; } public...

Как из метода производного класса вызвать поле родительского класса
Добрый день! Помогите пожалуйста вызвать поле базового класса из метода производного класса. Код, составленный мною выводит результат...

10
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
07.11.2014, 18:46
Цитата Сообщение от sysrepos Посмотреть сообщение
C#
1
2
ob[0].x=444; *//как дописать класс myakk, чтобы можно было так делать???
 ob[1].x=555; *//как дописать класс myakk, чтобы можно было так делать???
Ответ - никак не сделаешь, ибо такая запись не имеет смысла.
1
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9673 / 4825 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
07.11.2014, 20:28
C#
1
ob[0].x=444;
Не знаю, чего вы хотите добиться этим, но эта запись сложнее обеих предыдущих и, значит, от её использования нет никакой пользы, ибо проще использовать одну из первых двух.
0
27 / 55 / 19
Регистрация: 18.08.2014
Сообщений: 329
07.11.2014, 21:13
чисто теоритическое решение создать в конструкторе динамический массив либо структуру, которая позволяет добавлять элементы в себя например Dictionary<int, int>. Первый параметр будет индексом, второй значением. Добавлять элементы(метод Add) можно в словарь например(кавычки чисто образно, для наглядности): <1,444>, <2,555>,.....,<4,789> и т.д. и получать методом ContainsKey().

Или я не так понял, что нужно?
0
 Аватар для sysrepos
83 / 77 / 30
Регистрация: 08.08.2013
Сообщений: 461
Записей в блоге: 1
07.11.2014, 22:48  [ТС]
Цитата Сообщение от tezaurismosis Посмотреть сообщение
Не знаю, чего вы хотите добиться этим,
хочу создать что то вроде класса линия, в которой можно получать/задавать координаты любой точки таким вот простым способом

C#
1
2
3
4
5
ob[0].x=1; 
ob[0].y=1;
 
ob[1].x=5; 
ob[1].y=6;
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
07.11.2014, 23:33
sysrepos, ну раз вам так хочется... Вот мой велосипед.
Класс для точки:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Line_Test {
    class CustomPoint<T> where T:struct {
        public T X { get; set; }
        public T Y { get; set; }
        public void ResetPoint() {
            X = default(T);
            Y = default(T);
        }
        public override string ToString() {
            return string.Format("X: {0}, Y: {1}", X, Y);
        }
    }
}
Класс для линии:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
 
namespace Line_Test {
    class CustomLine<T,K> where T:CustomPoint<K> where K:struct {
        List<CustomPoint<K>> points = new List<CustomPoint<K>>();
        public CustomPoint<K> this[int index] {
            get {
                if (index >= points.Count)
                    throw new IndexOutOfRangeException("Wrong index of element!");
                else {
                    return points[index];
                }
            }
            set {
                points.Insert(index, value);
            }
        }
 
        public IEnumerable<CustomPoint<K>> GetPoints() {
            foreach(CustomPoint<K> item in points){
                yield return item;
            }
        }
    }
}
Использование:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Line_Test {
    class Program {
        static void Main(string[] args) {
            CustomLine<CustomPoint<int>, int> myLine = new CustomLine<CustomPoint<int>, int>();
            myLine[0] = new CustomPoint<int> { X = 10, Y = 10 };
            myLine[1] = new CustomPoint<int> { X = 20, Y = 20 };
            myLine[2] = new CustomPoint<int> { X = 30, Y = 30 };
 
            Console.WriteLine("Custom Line:");
            foreach (CustomPoint<int> p in myLine.GetPoints()) {
                Console.WriteLine(p);
            }
            
            myLine[0].X = 40;
            myLine[0].Y = 40;
 
            Console.WriteLine("\nChanged Custom Line:");
            foreach (CustomPoint<int> p in myLine.GetPoints()) {
                Console.WriteLine(p);
            }
            Console.WriteLine("\nResetting all points:");
            foreach (CustomPoint<int> p in myLine.GetPoints()) {
                p.ResetPoint();
            }
            foreach (CustomPoint<int> p in myLine.GetPoints()) {
                Console.WriteLine(p);
            }
            Console.ReadLine();
        }
    }
}
0
 Аватар для sysrepos
83 / 77 / 30
Регистрация: 08.08.2013
Сообщений: 461
Записей в блоге: 1
08.11.2014, 00:15  [ТС]
спасибо, а вот без
C#
1
2
using System.Collections.Generic;
using System.Linq;
такую структуру никак, значит, не написать?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
08.11.2014, 00:19
Цитата Сообщение от sysrepos Посмотреть сообщение
никак, значит, не написать?
Без LINQ можно, я его тут не применял. А вот без Generic-ов точно никак)))
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9673 / 4825 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
09.11.2014, 08:56
insite2012, попытался упростить тип CustomLine, чтобы он использовал только один тип-параметр:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class CustomLine<T> where T : struct
{
    List<CustomPoint<T>> points = new List<CustomPoint<T>>();
    public CustomPoint<T> this[int index] {
        get {
            if (index >= points.Count)
                throw new IndexOutOfRangeException("Wrong index of element!");
            else {
                return points[index];
            }
        }
        set {
            points.Insert(index, value);
        }
    }
 
    public IEnumerable<CustomPoint<T>> GetPoints() {
        foreach (CustomPoint<T> item in points) {
            yield return item;
        }
    }
}
Теперь создавать его чуть проще
C#
1
CustomLine<int> myLine = new CustomLine<int>();
Добавлено через 3 минуты
Можно даже ещё проще (сигнатура класса CustomLine<T>)
C#
1
class CustomLine<T>
т.е. вообще без where, т.к. это ограничение уже есть у типа CustomPoint<T>. Но, я думаю, ограничение для класса CustomLine<T> стоит оставить, чтобы код было проще читать.
0
 Аватар для wi34rd
13 / 13 / 10
Регистрация: 09.09.2014
Сообщений: 41
09.11.2014, 10:34
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
 
namespace Test
{
    public struct Coord
    {
        public int X;
        public int Y;
    }
 
    class MyAcc
    {
        readonly Coord[] _arr = new Coord[10];
 
        public Coord this[int index] {
            get {
                return _arr[index];
            }
 
            set {
                _arr[index] = value;
            }
        }
    }
 
    public class Program
    {
        private static void Main() {
            var myAcc = new MyAcc();
            Coord tempCoord;
 
            tempCoord.X = 444;
            tempCoord.Y = 555;
 
            myAcc[0] = tempCoord;
 
            Console.WriteLine(myAcc[0].X);
            Console.WriteLine(myAcc[0].Y);
        }
    }
}
1
 Аватар для sysrepos
83 / 77 / 30
Регистрация: 08.08.2013
Сообщений: 461
Записей в блоге: 1
10.11.2014, 11:42  [ТС]
спасибо, жаль нельзя сразу вот так
C#
1
myAcc[0].X=77;
присваивать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.11.2014, 11:42
Помогаю со студенческими работами здесь

Поле класса содержит массив объектов другого класса
Добрый день. Есть класс Queue,который как поле содержит массив объектов на класс Pers. public class Queue { private...

Поле класса - массив объектов другого класса
Здравствуйте. У меня определен класс Article, в котором определен конструктор по умолчанию. Затем определяю класс Magazine, в котором...

Как вместо ссылки на экземпляр класса передать поле класса?
Делаю свою шаблонную функцию для свойств с событиями, при обращении к таким свойствам приходится писать что то похожее на: public...

Индексатор и перегрузка операторов для класса Triangle
на Form/ помогите пожалуйста В класс Triangle добавить: a. Индексатор, позволяющий по индексу 0 обращаться к полю a, по индексу 1 –...

Только константное статическое поле НЕ МОЖЕТ быть поле членом класса !
class CCoords { static const float rate = 1.0f; // ОШИБКА !!! bool IsComputed; float x,y; POINT2D ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru