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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2010, 08:53   #1
Mixim
Форумчанин
 
Регистрация: 29.10.2009
Сообщений: 259
Вопрос Реализация метода Push для динамического класса

Необходимо создать некоторый динамический класс MyClass, в котором есть поля:
Код:
int i; MyClass Next; MyClass Prev
где Next и Prev - указатели на следующий и предыдущий элемент класса MyClass. Создаю метод Push(присоединение нового элемента к текущему):
Код:
public void Push(MyClass newMyClass)  
            {
                if (this != null)
                {
                    this.Next = newMatches;
                    newMatches.Prev = this;
                }
            }
и все бы было хорошо, но возможна же ситуация, когда this=null, тогда этот метод необходимо доработать и написать что-то вроди:
Код:
                ... else                   
                    this = newMatches;
но ведь в C# запрещено аргументу this присваивать какие-либо значения! Подскажите, как решить проблему, связанную с "this==null", может как-нибудь можно открыть доступ к this?
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
Mixim вне форума Ответить с цитированием
Старый 21.11.2010, 11:12   #2
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Вот я набросал, что-то по вашему описанию (на кол-во экземпляров не обращайте внимание). И как this может быть null, если метод этот вызвать может только созданный объект? То есть нет объекта, то метод вызвать нельзя никак.

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            MyClass mc = new MyClass();
            MyClass mc2 = new MyClass();
            MyClass mc3 = new MyClass();

            mc.Push(mc2);
            mc2.Push(mc3);
            mc3.Push(new MyClass());

            Console.WriteLine("Кол-во экземпляров: {0}", MyClass.I);
            Console.ReadKey();
        }
    }

    class MyClass
    {
        static int i; MyClass Next; MyClass Prev;
        /// <summary>
        /// Кол-во экземпляров класса
        /// </summary>
        public static int I
        {
            get { return MyClass.i; }
        }

        public MyClass()
        {
            MyClass.i++;
        }

        ~MyClass()
        {
            MyClass.i--;
        }

        public void Push(MyClass newMyClass)
        {
            if (newMyClass != null)
            {
                this.Next = newMyClass;
                newMyClass.Prev = this;
            }
            else throw new NullReferenceException("Не задана ссылка на объект");
        }
    }
}
Update:
А вы возможно имеете ввиду, что могут передать в качестве параметра null? Если да, то думаю такое решение подойдёт, что в коде выше. Ну в том случае, если передача null для вас крайне недопустима. Хотя потестил сейчас, исключение и так выскакивает. То есть вручную его вызвать смысла помоему нету. Вообще исключение не из-за того, что this null, а из-за то, что передаваемый параметр null. this это ссылка на тот объект внутри которого она используется.

Update:
this не может быть null

Код:
public void Push(MyClass newMyClass)  
            {
                if (this != null) //!!! this никак не может быть null !!!
                {
                    this.Next = newMatches;
                    newMatches.Prev = this;
                }
            }

Последний раз редактировалось Casper-SC; 21.11.2010 в 11:24. Причина: Дополнил
Casper-SC вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
реализация метода Хаффмана ShturmBan Помощь студентам 2 13.01.2010 15:46
Реализация метода Хаффмана Minton87 Помощь студентам 0 27.12.2009 20:30
Реализация метода поиска неисправности =\ Minton87 Помощь студентам 0 27.12.2009 20:13
реализация симплекс метода rasmus_rasmus_87 Помощь студентам 7 28.05.2009 06:54
Создание метода Click у динамического меню Alessi Общие вопросы Delphi 2 23.03.2009 11:01