Переходи на строку 60 к Жене/Жёнам
```
class Talker {
public static int BlahBlahBlah(string thingToSay, int numberOfTimes)
```
> [BlahBlahBlah это метод его тип возвращаемого значения - число,
если бы я писал public static void - тогда не нужно было бы указывать int так?
ведь он ничего не возвращает?
а парметры в скобках это входные параметры которые мы ему задаем?]
```
public class MessageBox{
string name;
public Show(string s){
}
}
{
string finalString = “”;
for (int count = 1; count <= numberOfTimes; count++)
{
finalString = finalString + thingToSay + “\n”;
}
MessageBox.Show(finalString);
MessageBox.Show(finalString.Length);
```
> [почему здесь выводим данные которые у нас есть в переменной finalString?
ведь методу BlahBlahBlah нужно число - мы ведь и ищем это некое число?
а мы тут берем и выводим строковые параметры переменной - логичнее было бы
вывести переменную finalString.Length ведь мы итоговая цель это подсчитать количество знаков в переменной finalString, нет разве?]
```
return finalString.Length;
```
> [ретурн возвращает переменную finalString.Length в метод BlahBlahBlah?
почему нужна такая конструкция, разве операторы не есть решения метода BlahBlahBlah
и вся суть всей этой конструкции это нахождение решения для метода BlahBlahBlah???
тут возможно можно было бы сказать что код не знает какую именно переменную нужно передать в оператор
BlahBlahBlah - но ответ кроется в следущей странице где мы сходу делаем такую манипуляцию:
int finalString.Length = BlahBlahBlah() - вот ж понятнаая и простая консрукция - программа знает что очевидно переменная finalString.Length это и есть ответ
]
```
}
}
```
```
////
public class Wife{
int age;
public string name;
bool isMarried;
public Wife(){}//Default Constructor,
//его не обязательно писать, компилятор сам его создает автоматически.
//При создании экземпляра класса у нас
//есть выбор какой конструктор использовать
public Wife(string Sname, int Iage){//Наш конструктор, такой какой мы хотим
//Возьми ЭТОТ объект, и установи его имя на Sname
this.name = Sname;
//Возьми ЭТОТ обьект.возраст и установи его на Iage
this.age = Iage;
}
// void saw(Husband h){
// Console.WriteLine("Go wash the dishes");
// }
}
internal class Program
{
//void marry(Wife zhena, Husband h){
// zhena.isMarried = true;
// h.isMarried = true;
//}
public static void Main(string[] args)
{
Wife wife1 = new Wife();
Console.WriteLine(wife1.name);
}
}
////
Wife wife1 = new Wife();
Wife wife2 = new Wife("ursula", 35);
Husband husband = new Husband();
marry(alina,husband);
while(husband.isMarried){
alina.saw(husband);
if(husband.wantsADivorce?){
husband.isMarried = false;
}
}
//This method paints an object some color
int paint(Button b, Color a){
}
private void button1_Click(object sender, EventArgs e);
int main(){
///
button1_Click(button12, eventArguments);
button1_Click(button12, eveArg2);
}
g
```
onlinegdb.com
```
using System;
class HelloWorld {
public class Wife{
int age;
public string name = "alina";
bool isMarried;
public Wife(){}
public Wife(string Sname, int Iage){
this.name = Sname;
this.age = Iage;
}
// void saw(Husband h){
// Console.WriteLine("Go wash the dishes");
// }
}
internal class Program
{
// public void marry(Wife zhena, Husband h){
// zhena.isMarried = true;
// h.isMarried = true;
// }
//
public static void Main(string[] args)
{
Wife wife1 = new Wife();
Console.WriteLine(wife1.name);
}
}
}
```
```
class Talker {
public int static BlahBlahBlah(string thingToSay, int numberOfTimes)
{
string finalString = “”;
for (int count = 1; count <= numberOfTimes; count++)
{
finalString = finalString + thingToSay + “\n”;
}
MessageBox.Show(finalString);
return finalString.lenght;
Console.WriteLine("Hello");
}
}
using "myFile.cs"
namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int len = Talker.BlahBlahBlah(textBox1.Text, numericUpDown1.Value);
MessageBox.Show("The message lenght is" + len);
}
}
}
using System.Windows.Forms;
```
{
public static void Main (String args[])
{
string [] shmotki = new string [100] ;
men [] gruzchiki = new men [10];//так скорее всего не получится,но нужно проверить.
Pereezd pervogomaya = new Pereezd();
Dom apartment = new Dom();
pervogomaya.perenosShmotok(apartament, gruzchiki[]);
}
class Pereezd;
{
public void perenosShmotok () ///
{
bool result;
// тут я использую наверное какой нибудь цикл который будет проверять все ли шмотки перехали на новый адресс.
if( result == true)
{
MessageBox.Show("переезд выполнен успешно"); /// показываю результат
}
class Dom();
{
//можешь оставить как есть
///я хз что я тут должен делать. тут просто надо описать поля чтоли для создания нового экземпляра в параметрах?
}
//программа не скомпилируется.
//Нельзя создавать методы в мейне, также как нельзя написать механику внутри игры, ты не можешь создать новое движение пока играешь в игру.
// Pereezd pervogomaya = new Pereezd();
//Dom apartment = new Dom();
//нужно создать массив грузчиков
//
//ты должен только вызвать метод у созданного переезда
//pervogomaya.perenosShmotok(apartament, gruzchiki);
проверка кода программы
namespace WindowsFormsApp9
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
LabelBouncer[] bouncers = new LabelBouncer[3]; ///создаем новый экземпляр массива c именем bouncers
** //новый массив обьектов
**
private void ToggleBouncing (int index, Label labeltobouce){ // создаем метод с двумя входными параметрами: числом index и ссылкой на объект класса
if (bouncers[index] == null) //** если в элементе массива index ничего нет**
//если в массиве под индексом пусто
{
bouncers[index] = new LabelBouncer(); /// тогда в элементе массива index создаем ссылку на новый объект LabelBouncer. Здесь я не могу понять такой момент: bouncers[index] это и есть ссылка (и по сути имя) нового объекта?->**Верно** Или ссылка на новый объект у нас идет следующей строкой???
bouncers[index].MyLabel = labeltobouce; ///**Берем наш созданный баунсер, который находится в массиве под индексом [индекс] и устанавливаем его лейбл** тут мне очень сложно разобраться: MyLabel это поле, которое одновременно является ссылкой на объект класса Label**Верно**, которое сейчас находистя в одном из элементов массива, и этому элементу массива добавляется новая ссылка labeltobouce получается?
}
else /// иначе
{
bouncers[index] = null; /// удалить все данные которые содержатся в элементе bouncers[index]
}
}
private void button1_Click(object sender, EventArgs e)
{
ToggleBouncing(0, label1); /// тут соответственно при нажатии на кнопку вызывается метод ToggleBouncing куда передаются два входящих параметра: число index равно 0, а ~~переменная~~**параметр** labeltobouce которая принадлежит классу Label присваивается значение label1 **Не совсем**
//**передаем обьект label1**
}
private void button2_Click(object sender, EventArgs e)
{
ToggleBouncing(1, label2); /// тоже самое смотри выше
}
private void button3_Click(object sender, EventArgs e)
{
ToggleBouncing(2, label3); /// тоже самое смотри выше
}
private void timer1_Tick(object sender, EventArgs e)
{
for (int i =0; i<3; i++) /// вот этот момент мне абсолютно не понятен: нажатие на кнопку является событием, при возникновении которого запускается все что там есть ниже - а вот этот цикл работает с момента запуска программы получается? получается что у меня парралельно два куска программы работают - один циклично перебирает значения а второй запускает методы которые вписаны после нажатия на кнопку?**Вышли мне название книги, чтобы тебе помочь мне нужно видеть программу в учебнике.**
{
if (bouncers[i] != null) /// если элемент массива bouncers[i] (i в данном случае будет равен одному из чисел входящих параметров index метода ToggleBouncing,**Нет, i равен тому i который в for** поэтому это по сути просто еще одна ссылка на одну из ячеек массива bouncers) не пустой тогда...
{
bouncers[i].Move(); ///вот тут я совершенно путаюсь, у нас ведь массив это по сути набор ссылок на три объекта, у которых уже заранее прописаны методы, просто каждой из при нажатии на клавишу передается свой входящий параметр... так вот мы просто создаем три объекта bouncers[~~1~~**0**], bouncers[~~2~~**1**], bouncers[~~3~~**2**] (да я знаю что это только ссылки, а не сами объекты, но этого ведь одновременно и их ярлыки/имена, ведь так **Да, ссылки на эти обьекты**?), затем в нужном нам объекте (выбирается через переменную i) выполняем метод Move...
}
}
}
}
class LabelBouncer /// ну собсна сам шаблон наших будущих объектов bouncers[1], bouncers[2], bouncers[3] которые еще не созданы
{
public Label MyLabel; /// поле, объявляем переменную MyLabel которая одновременно является ссылкой на объект Label...
public bool GoingForward = true; /// поле, является булевой переменной, присваваем значение true
public void Move() /// метод Мув, без входных параметров
{
if (MyLabel != null) /// если поле MyLabel не является пустым, т.е. создан новый объект класса Label тогда
{
if (GoingForward == true) /// если булевая переменная имеет значение true, тогда
{
MyLabel.Left += 15; /// свойство Left объекта на который ссылается MyLabel увеличить на 15
if (MyLabel.Left > MyLabel.Parent.Width - MyLabel.Width) /// дальше ниче особо интересного, расписывать смысла нет
{ GoingForward = false; }
}
else
{
MyLabel.Left -= 5;
if (MyLabel.Left <= 0)
{
GoingForward = true;
}
}
}
}
}
}