#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
Почему все напали на пример. Он в книге абсолютно верный. Или мы читать разучились? Там же красным по белому написано, что две следующие строки не будут выполнены. Они как раз и говорят, что так писать не получится.
Комментариев нет:
Отправить комментарий