Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2011, 15:13   #1
kesha2008
Пользователь
 
Регистрация: 23.02.2009
Сообщений: 12
Хорошо Возвращение ссылки на объект

Есть такой класс:
Код:
public class TMapPolyline: TMapObject
{
        private List <TDoublePoint> FNodes;     
        public TMapPolyline()
        {
            FNodes =  new List <TDoublePoint>();
        }
        ~TMapPolyline()
        {
            FNodes.Clear();
            FNodes.TrimExcess();
        }
        public void AddNode(double x, double y)
        {
            TDoublePoint Point; //= new TDoublePoint();
            Point.x=x;
            Point.y=y;
            FNodes.Add(Point);
            FLength=GetLength();
        }
        public TDoublePoint GetNode(int index)
        {
            if (index < 0 | index > FNodes.Count - 1)
                throw new ArgumentOutOfRangeException("Index", "Error happened. index<0 or index>FNodes.Count-1");
            return FNodes[index];
        } 
        public TDoublePoint this[int index] { get { return GetNode(index); } } 
}
где TDoublePoint является структурой
Код:
    
public struct TDoublePoint    
{
        public double x;
        public double y;
};
Мне надо реализовать такую возможность:
Создаю объект и добавляю пару элементов ( с этим нет проблем)
Код:
TMapPolyLine obj = new TMapPolyLine();
obj.AddNode (3,3);
obj.AddNode (3,5);
а потом, допустим, нужно поменять значения второго элемента в списке точек
Код:
obj[1].x = 7;
obj[1].y = 7;
Вот здесь и происходят непонятки.

obj[1] = через get метод возвращает новый объект типа TDoublePoint,
и координаты меняются в нём, а мне надо поменять непосредственно у объекта в списке.

Как можно реализовать данное дело?

Думаю как-нибудь возвращать не сам объект, а ссылку на него, но на ум не приходит, как это реализовать.
kesha2008 вне форума Ответить с цитированием
Старый 29.05.2011, 15:25   #2
Spawn™Production®
Форумчанин
 
Аватар для Spawn™Production®
 
Регистрация: 06.05.2011
Сообщений: 287
По умолчанию

У структур не ссылочный тип...
Либо превратить структуру в класс, либо обращаться не по индексу.
Spawn™Production® вне форума Ответить с цитированием
Старый 29.05.2011, 15:34   #3
kesha2008
Пользователь
 
Регистрация: 23.02.2009
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Spawn™Production® Посмотреть сообщение
У структур не ссылочный тип...
Либо превратить структуру в класс, либо обращаться не по индексу.
Как сразу не догадался вместо структуры класс написать. Совсем забыл, что структуры не ссылочный тип. Большое спасибо за помощь.

А как можно обращаться, если не по индексу? Список приватный, к нему доступа как-такового нету.



И ещё такой вопрос: в Builder 6 и в Delphi есть класс TCustomControl. В C# он называется System.Windows.Forms.Control или как-то по другому?

Последний раз редактировалось kesha2008; 29.05.2011 в 15:42.
kesha2008 вне форума Ответить с цитированием
Старый 29.05.2011, 15:47   #4
Spawn™Production®
Форумчанин
 
Аватар для Spawn™Production®
 
Регистрация: 06.05.2011
Сообщений: 287
По умолчанию

мм, например...
Код:
        public Form1()
        {
            InitializeComponent();

            var cls = new myClass();
            myStruct myStruct = new myStruct();
            cls.GetMyStruct(ref myStruct, 5);
        }

        private class myClass
        {
            private List<myStruct> myfields;

            public myClass()
            {
                myfields = Enumerable.Range(0, 10).Select(i => new myStruct(i, i)).ToList();
            }

            public void GetMyStruct(ref myStruct _struct, int index)
            {
                _struct = myfields[index];
            }
        }

        private struct myStruct
        {
            public int x;
            public int y;

            public myStruct(int _x, int _y)
            {
                x = _x;
                y = _y;
            }
        }
Spawn™Production® вне форума Ответить с цитированием
Старый 29.05.2011, 15:49   #5
Spawn™Production®
Форумчанин
 
Аватар для Spawn™Production®
 
Регистрация: 06.05.2011
Сообщений: 287
По умолчанию

UserControl, скорее всего аналог, хотя, я, например, стараюсь от базового Control наследоваться.
Spawn™Production® вне форума Ответить с цитированием
Старый 29.05.2011, 16:26   #6
kesha2008
Пользователь
 
Регистрация: 23.02.2009
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Spawn™Production® Посмотреть сообщение
UserControl, скорее всего аналог, хотя, я, например, стараюсь от базового Control наследоваться.
Ещё раз спасибо. Пример твой разобрал, суть уловил. Буду дальше творить.
kesha2008 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возвращение массива записей через объект CodeNOT PHP 8 14.04.2011 18:30
Шаблоны - нужно создать объект класса abc в котором вместо aa использовался бы объект класса fff? Farrel Общие вопросы C/C++ 2 13.11.2010 17:37
Про возвращение значения ... 2face2 Помощь студентам 0 24.01.2010 22:19
Возвращение стража.... Манжосов Денис :) Софт 0 18.09.2008 22:57