Darshan E Ksheerasagar Ответов: 1

Ошибка ссылки на объект, отображаемая при доступе


----------Мой класс A1. cs----------------
открытый класс А1
{
public B1 AA { get; set; }
}

открытый класс В1
{
public C1 BB { get; set; }
}

открытый класс С1
{
public D1 CC { get; set; }
}

открытый класс Д1
{
общественные Е1 ДД { получить; набор; }
}

открытый класс Е1
{
публичная строка EE { get; set; }
}


-----------------основной класс-----------
protected void Page_Load(отправитель объекта, EventArgs e)
{
пробовать
{
Обя А1 = А1 новый();
ObjA.AA.BB.CC.DD.EE = "";
}
поймать (исключение бывший)
{

}
}

Что я уже пробовал:

Когда я пытаюсь получить доступ ObjA.AA.BB.CC.DD.EE = ""; its showin error Object reference Error

Richard MacCutchan

Поскольку у вас нет конструктора в классе A1, то член AA не инициализируется, и поэтому вы получаете ошибку ссылки. Вам нужно вернуться к своей документации и изучить раздел о создании классов и объектов.

1 Ответов

Рейтинг:
5

OriginalGriff

Это одна из самых распространенных проблем, которые нам задают, и это также та, на которую мы меньше всего готовы ответить, но вы больше всего готовы ответить сами.

Позвольте мне просто объяснить, что означает ошибка: Вы попытались использовать переменную, свойство или возвращаемое значение метода, но оно содержит null - что означает, что в переменной нет экземпляра класса.
Это немного похоже на карман: у вас есть карман в рубашке, в котором вы держите ручку. Если вы сунете руку в карман и обнаружите, что там нет ручки, вы не сможете подписать свое имя на листе бумаги - и вы получите очень смешные взгляды, если попытаетесь! Пустой карман дает вам нулевое значение (здесь нет ручки!), поэтому вы не можете сделать ничего такого, что обычно делали бы, когда извлекли свою ручку. Почему он пуст? Вот в чем вопрос - может быть, вы забыли взять ручку, когда уходили из дома сегодня утром, или, возможно, вы оставили ручку в кармане вчерашней рубашки, когда снимали ее вчера вечером.

Мы не можем сказать, потому что нас там не было, и, что еще важнее, мы даже не можем видеть вашу рубашку, не говоря уже о том, что находится в кармане!

Вернемся к компьютерам, и вы каким - то образом сделали то же самое-и мы не можем увидеть ваш код, а тем более запустить его и узнать, что содержит null, когда это не должно быть.
Но вы можете - и Visual Studio поможет вам здесь. Запустите свою программу в отладчике, и когда она выйдет из строя, VS покажет вам строку, на которой она обнаружила проблему. Затем вы можете начать смотреть на различные его части, чтобы увидеть, какое значение равно null, и начать просматривать свой код, чтобы выяснить, почему. Поэтому поставьте точку останова в начале метода, содержащего строку ошибки, и снова запустите программу с самого начала. На этот раз VS остановится перед ошибкой и позволит вам изучить, что происходит, пройдя через код, глядя на ваши значения.

В данном случае это довольно очевидно: вы создаете экземпляр класса A1, но не создаете экземпляр любого другого. Так что если вы попытаетесь использовать просто ObjA.AA вы получите ту же ошибку, потому что АА пуст - у него есть null ценность.
Добавьте конструкторы в каждый класс:

public class A1
            {
            public B1 AA { get; set; }
            public A1()
                {
                AA = new B1();
                }
            }
И это начнет работать.


Darshan E Ksheerasagar

Спасибо, спасибо, спасибо, оооочень много оригинального грифа...

OriginalGriff

Пожалуйста!

Darshan E Ksheerasagar

Привет OriginalGriff я ударил в приведенном ниже коде пожалуйста помогите мне

открытый класс К1
{
общественные К1()
{
I1Value = новый I1[] { };
}

private I1[] I1Value;

общественные И1[] K1_Method
{
получить
{
верни это.I1Value;
}
набор
{
этот.I1Value = значение;
}
}
}
открытый класс И1
{
общественные И1()
{
Cd = новый InstCode();
}
private InstCode cdField;
частная строка instField;

общественные Instruction3Code кд
{
получить
{
вернуть это.cdField;
}
набор
{
это.cdField = значение;
}
}
публичная строка InstrInf
{
получить
{
вернуть это.instField;
}
набор
{
это.instField = значение;
}
}
}

public enum InstCode
{
Один,
Б,
С,
Д,
}



Когда я пытаюсь получить доступ к такому методу, как этот, я не могу получить доступ

protected void Page_Load(отправитель объекта, EventArgs e)
{
пробовать
{
K1 objK1 = новый K1();
//objK1.K1_Method[0].Cd = ((InstCode)Enum. Parse(typeof(InstCode), "D"));
objK1.K1_Method.
}
поймать (исключение бывший)
{

}
}

Darshan E Ksheerasagar

Как вы уже сказали, я изменил свой код, чтобы он выглядел следующим образом

общественный разделяемого класса А1
{
общественные А1()
{
AA = новый B1();
}

частный B1 objB1;
общественные В1 АА
{
получить
{
вернуть это.objB1;
}
набор
{
это.objB1 = значение;
}
}

}

общественный разделяемого класса В1
{
общественные В1()
{
BB = новый C1 { };
}

частный C1 objC1;
общественные С1 ВВ
{
получить
{
вернуть это.objC1;
}
набор
{
это.objC1 = значение;
}
}

}

общественный разделяемого класса С1
{
общественные С1()
{
CC = новый D1();
}

частный D1 objD1;
общественные Д1 куб.
{
получить
{
вернуть это.objD1;
}
набор
{
это.objD1 = значение;
}
}

}

общественный разделяемого класса Д1
{
общественные Д1()
{
//DD = новый E1();
}

частный E1[] objE1;
общественные Е1[] ДД
{
получить
{
вернуть это.objE1;
}
набор
{
это.objE1 = значение;
}
}

}

общественный разделяемого класса Е1
{
частная строка ValE1;
общественного строка УО
{
получить
{
верните это. ValE1;
}
набор
{
this. ValE1 = значение;
}
}
}


но проблема в том, что в конструкторе класса D1 я хочу создать объект типа E1, который является типом массива, как я могу создать объект ...?