Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пропадает ссылка на объект, NullReferenceException was unhandled 
V
    Опции темы
Dino99rus
Дата 26.2.2008, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 10.1.2007

Репутация: 1
Всего: 2



Код

public partial class Form1 : Form
{
    private FunctionOperation obFO;
    private SentenceAnalysis obSA;
    private OPN obOPN;
    public Form1()
    {
        obSA = new SentenceAnalysis(this);
        obFO = new FunctionOperation(this);
        obOPN = new OPN();
    } 
}
public class FunctionOperation
{
    private OPN obOPN;
    private Form1 obForm;
    public FunctionOperation(OPN obC)
    {
        this.obOPN = obC;
        obEr = new CalcError();
    }
    public FunctionOperation(Form1 form)
    {
        this.obForm = form;  //вот тут ссылка  существует, пока не вызван конструктор FunctionOperation(OPN obC) 
        // после obForm =null
    }
}
public class OPN
{
    private FunctionOperation obFO;
    public OPN()
    {       
        obFO = new FunctionOperation(this);        
    }
}
public class SentenceAnalysis
{    
    private Form1 ObF;  
    public SentenceAnalysis(Form1 form)
    {
        this.ObF = form;        
    }
}

Кажись я что-то с конструкторами намудрил smile . Почему пропадает ссылка на форму???

Это сообщение отредактировал(а) Dino99rus - 27.2.2008, 18:51
PM MAIL   Вверх
Injener
Дата 26.2.2008, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 6.10.2006
Где: СПб

Репутация: 1
Всего: 1



Когда вызываешь конструктор, создается новый объект, у которого в самый первый момент все поля неинициализированы. Инициализацию полей производит конструктор. Если вызываешь первый конструктор, который ничего не присваивает obForm, то естественно ссылка на нужную тебе форму из ниоткуда не появится.
--------------------
Любое дело можно сделать тремя способами:1) правильно2) неправильно3) и так как это делают в армии
PM MAIL   Вверх
Dino99rus
Дата 27.2.2008, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 10.1.2007

Репутация: 1
Всего: 2



Injener,
Смотри. Form1 инициализируется первой 
Код
obFO = new FunctionOperation(this)
 и в этой строчке передаст мне ссылку на форму в класс FunctionOperation, что и мне показывает дебагер. Но вот после того как класс OPN передает ссылку на себя классу FunctionOperation, obForm = null.
PM MAIL   Вверх
Crimp
Дата 27.2.2008, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 21.10.2007
Где: Tula

Репутация: нет
Всего: 2



Посмотри ешё раз на эти строчки, и подумай что ты тут сам написал
Код

public FunctionOperation(Form1 form)
    {
        this.obForm = form;  //вот тут ссылка  существует, пока не вызван конструктор FunctionOperation(OPN obC) 
        // после obForm =null
    }

И прости меня конечно, но менее читабельного кода я не видел :( 
obFO, obSA, obOPN, obForm, obC, obEr, ObF   кто следуюший. (Этро просто мой совет)

Это сообщение отредактировал(а) Crimp - 27.2.2008, 01:08
PM MAIL ICQ   Вверх
Dino99rus
Дата 27.2.2008, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 10.1.2007

Репутация: 1
Всего: 2



Цитата(Crimp @  27.2.2008,  01:03 Найти цитируемый пост)
Посмотри ешё раз на эти строчки, и подумай что ты тут сам написал

Посмотрел и ничего не увидел. Если что не так скажи почему.


Цитата(Crimp @  27.2.2008,  01:03 Найти цитируемый пост)
И прости меня конечно, но менее читабельного кода я не видел :( 
obFO, obSA, obOPN, obForm, obC, obEr, ObF   кто следуюший. (Этро просто мой совет)

Да знаю я smile . Просто пишу для себя.
PM MAIL   Вверх
Alekz
Дата 27.2.2008, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 5.2.2008
Где: Запорожье, Украин а

Репутация: 1
Всего: 2



Если я правильно понял, вначале ты создаешь обьект Form1.

1. new SentenceAnalysis(this); - класс Form1
2. obFO = new FunctionOperation(this); - класс Form1. ты создаешь объект типа FunctionOperation, вызывая конструктор public FunctionOperation(Form1 form) и инициализируешь его объектом типа Form1. В дебагере ты видишь этот объект в поле obForm.
3. obOPN = new OPN(); - Form1. В конструкторе OPN() ты создаешь новый  объект FunctionOperation (), вызывая конструктор  public FunctionOperation(OPN obC). Естественно, что у этого объекта поле obForm будет пустым.

Это и имел в виду Injener.

P.S.
 И все-таки сделай что-то со стилем. Код трудно читаемый, поэтому и возникает путаница.

Это сообщение отредактировал(а) Alekz - 27.2.2008, 10:08
PM MAIL   Вверх
Dino99rus
Дата 27.2.2008, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 10.1.2007

Репутация: 1
Всего: 2



Цитата(Alekz @  27.2.2008,  09:33 Найти цитируемый пост)
Естественно, что у этого объекта поле obForm будет пустым.

Тогда что же делать. Мне нужно чтобы класс FunctionOperation имел ссылку и на Form1, и на OPN.
PM MAIL   Вверх
Alekz
Дата 27.2.2008, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 5.2.2008
Где: Запорожье, Украин а

Репутация: 1
Всего: 2



Цитата(Dino99rus @ 27.2.2008,  14:12)
Тогда что же делать. Мне нужно чтобы класс FunctionOperation имел ссылку и на Form1, и на OPN.

Перепроектировать)

А если серьезно - сделай для OPN конструктор, принимающий ссылку на Form1. Там создавай свой FunctionOperation  и инициализируй его этой ссылкой.
PM MAIL   Вверх
Dino99rus
Дата 27.2.2008, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 10.1.2007

Репутация: 1
Всего: 2



Цитата(Alekz @  27.2.2008,  15:21 Найти цитируемый пост)
Перепроектировать)

Так и думалsmile Просто хотел до конца разобраться.

 
Цитата(Alekz @  27.2.2008,  15:21 Найти цитируемый пост)
А если серьезно - сделай для OPN конструктор, принимающий ссылку на Form1. Там создавай свой FunctionOperation  и инициализируй его этой ссылкой.

понятно спс
Код

public partial class Form1 : Form
{
    private OPN obOPN;
    public Form1()
    { 
        obOPN = new OPN(this);
    } 
}
public class FunctionOperation
{
    private OPN obOPN;
    private Form1 obForm;
    public FunctionOperation(OPN obClassOPN, Form1 form)
    {
        this.obOPN = obClassOPN;        
        this.obForm = form;
    }
}
public class OPN
{
    private FunctionOperation obFO;
    public OPN(Form1 form)
    {       
        obFO = new FunctionOperation(this, form);
    }
}

ты это имел виду

Это сообщение отредактировал(а) Dino99rus - 27.2.2008, 19:28
PM MAIL   Вверх
Alekz
Дата 28.2.2008, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 5.2.2008
Где: Запорожье, Украин а

Репутация: 1
Всего: 2



Типа того.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0485 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.