#c_sharp
Здравствуйте! Начал заниматься по книге C# для школьников и столкнулся сразу же с трудностью. А именно в примерах, которые приводят в книге не понятно почему подчёркивается всё красной линией и не работает. Допустим этот пример: using System; class Animal { public string kindOfAnimal; public string name; public int numberOfLegs; public int height; public int length; public string color; bool hasTail; protected bool isMammal; private bool spellingCorrect; } class Zoo { public void GetAnimal() { Animal a = new Animal(); a.kindOfAnimal = "Kangaroo"; a.isMammal = false; a.spellingCorrect = true; } } А вот так правильно? Насколько я понял, мне сейчас подчёркивает две строки: a.isMammal = false; a.spellingCorrect = true; Так как они protected и private? Так? А вот скриншот из книги. Она называется C# для школьников.
Ответы
Ответ 1
Да, пример в книге неправильный. Это и не должно работать. Смотрите. Что такое класс, по сути? Это описание объекта, которое содержит данные и действия (которые называют обычно код). Код в классе лежит не весь одной кучей, а кусками (они называются функции или методы). В вашем примере код лежит просто в классе: class Zoo { Animal a = new Animal(); a.kindOfAnimal = "Kangaroo"; a.isMammal = false; a.spellingCorrect = true; } Но его нужно уложить в функцию, чтобы потом можно было этот кусок кода вызвать: class Zoo { public Animal CreateAnimal() { Animal a = new Animal(); a.kindOfAnimal = "Kangaroo"; a.isMammal = false; a.spellingCorrect = true; return a; } } В этом случае можно будет заставить этот кусок кода выполниться: Zoo zoo = new Zoo(); Animal kangaroo = zoo.CreateAnimal(); Обновление: Да, присвоение полям isMammal и spellingCorrect тоже не должно работать. Обращаться «снаружи» можно лишь к публичным (то есть, открытым) данным.Ответ 2
Для примера возьмем 2 класса: Animal и Elephant class Animal{} class Elephant{} Экземпляр класса Animal можно создать и поместить в поле класса Elephant, но просто выполнять операторы непосредственно внутри класса (т. е. вне методов, конструкторов, свойств и т. д.) - нельзя. class Animal { public string Name; } class Elephant { Animal elephant = new Animal(); elephant.Name = "Слон Микки"; //Нельзя } К членам класса Animal (методы, поля и т.д) вы можете обращаться через конструкторы, методы, события и т.д. Например: class Animal { public string Name; } class Elephant { Animal animal = new Animal(); public void GetName() { animal.Name = "Слон"; } } Описал как можно кратко. Книгу, которую читаете Вы - сожгите :) Советую для чтения книги, которые описаны: тут Удачного кодинга...Ответ 3
Почему все напали на пример. Он в книге абсолютно верный. Или мы читать разучились? Там же красным по белому написано, что две следующие строки не будут выполнены. Они как раз и говорят, что так писать не получится.
Комментариев нет:
Отправить комментарий