Deutsch

Балуюсь в сирешотку 25.02.2025

367  
uscheswoi_82 патриот25.02.25 09:36
25.02.25 09:36 

Всем привет! Скучно, и хочу баловаться в современную сирешотку.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#1 
uscheswoi_82 патриот25.02.25 09:48
NEW 25.02.25 09:48 
в ответ uscheswoi_82 25.02.25 09:36

Структуры...

using System;
public class Program {
  struct Зверь {
    public String кличка;
    public int возраст;
    public void Вывод() => Console.WriteLine($"Меня зовут {кличка}, и мне {возраст} года/лет.");
  }
  public static void Main(string[] args) { 
    Зверь кошка = new Зверь {кличка = "Муся", возраст = 2}; 
    Зверь медведь = кошка with { кличка = "Мишаня"};
    кошка.Вывод();
    медведь.Вывод();
  }
}


Результат:

Меня зовут Муся, и мне 2 года/лет.
Меня зовут Мишаня, и мне 2 года/лет.
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#2 
uscheswoi_82 патриот25.02.25 10:22
NEW 25.02.25 10:22 
в ответ uscheswoi_82 25.02.25 09:48

Улучшу код...

using System;
public class Program {
  struct Зверь {
    public String кличка;
    public int возраст;

    private String ГодИлиГода() => возраст > 0 && возраст < 2 ? $"год." : $"года.";
    private String ПроверкаВозраста() => возраст < 5 ? $"{возраст} {ГодИлиГода()}" : $"{возраст} лет.";
    public void Вывод() => Console.WriteLine($"Меня зовут {кличка}, и мне {ПроверкаВозраста()}");
  }

  public static void Main(string[] args) { 
    Зверь кошка = new Зверь {кличка = "Муся", возраст = 2}; 
    Зверь медведь = кошка with { кличка = "Мишаня"};
    Зверь собака = new Зверь { кличка = "Стиф", возраст = 1};
    Зверь кошка2 = new Зверь { кличка = "Люся", возраст = 5};
    кошка.Вывод();
    медведь.Вывод();
    собака.Вывод();
    кошка2.Вывод();
  }
}


Результат:

Меня зовут Муся, и мне 2 года.
Меня зовут Мишаня, и мне 2 года.
Меня зовут Стиф, и мне 1 год.
Меня зовут Люся, и мне 5 лет.
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#3 
uscheswoi_82 патриот25.02.25 11:28
NEW 25.02.25 11:28 
в ответ uscheswoi_82 25.02.25 10:22

Возвращение множество значений. В Python и в PHP можно возвращать несколько значений без массива или объекта.

В PHP так:

<?php
  function getInformation() {
    return array("Антон", "Попов", 43);
  }

  list ($str_firstname, $str_lastname, $int_age) getInformation();
  echo sprintf("%s %s %s", $str_firstname, $str_lastname, $int_age);
?>



А в Python вот так:

def get_information():
  return "Антон", "Попов", 43

firstname, lastname, age = get_information()
print(firstname, lastname, age)



В C# так, нужно чтобы были методы статичкскими:

Так:

using System;
public class Program {
  static Tuple<String, String, Int32> ПолучитьИнформациюОЧеловеке() {
    return Tuple.Create("Антон", "Попов", 43);
  }
  public static void Main(string[] args) {
    var person = ПолучитьИнформациюОЧеловеке();
    Console.WriteLine($"{person.Item1} {person.Item2} {person.Item3}");
  }
}



Или вот так:

using System;
public class Program {
  static Tuple<String, String, Int32> ПолучитьИнформациюОЧеловеке() {
    return new Tuple<String, String, Int32>("Антон", "Попов", 43);
  }
  public static void Main(string[] args) {
    var person = ПолучитьИнформациюОЧеловеке();
    Console.WriteLine($"{person.Item1} {person.Item2} {person.Item3}");
  }
}



Результат:

Антон Попов 43
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#4 
uscheswoi_82 патриот25.02.25 11:32
NEW 25.02.25 11:32 
в ответ uscheswoi_82 25.02.25 11:28

Нет в Python вот так:

def get_information():
  return ["Антон", "Попов", 43]

firstname, lastname, age = get_information()
print(firstname, lastname, age)
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#5 
uscheswoi_82 патриот25.02.25 11:44
NEW 25.02.25 11:44 
в ответ uscheswoi_82 25.02.25 11:32

Опечатка в PHP вот так:

<?php
  function getInformation() {
    return array("Антон", "Попов", 43);
  }

  list ($str_firstname, $str_lastname, $int_age) getInformation();
  echo sprintf("%s %s %d", $str_firstname, $str_lastname, $int_age);
?>
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#6 
uscheswoi_82 патриот25.02.25 11:58
NEW 25.02.25 11:58 
в ответ uscheswoi_82 25.02.25 11:44

Именованные параметры/аргументы, вот примет:

public class Program {
  class Зверь {
    public String кличка;
    public int возраст;

    public Зверь() {}

    public Зверь(String кличка, int возраст) {
      this.кличка = "Боб";
      this.возраст = возраст;
    }
 
    public void УстановитьЗначения(String кличка, int возраст) {
      this.кличка = "Боб";
      this.возраст = возраст;
    }
 
    private String ГодИлиГода() => возраст > 0 && возраст < 2 ? $"год." : $"года.";
    private String ПроверкаВозраста() => возраст < 5 ? $"{возраст} {ГодИлиГода()}" : $"{возраст} лет.";
    public void Вывод() => Console.WriteLine($"Меня зовут {кличка}, и мне {ПроверкаВозраста()}");
  }
 
  public static void Main() {
    Зверь кот = new Зверь();
    кот.УстановитьЗначения(кличка:"Боб", 1);
    кот.Вывод();
  }
}



Результат:

Меня зовут Боб, и мне 1 год.
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#7 
uscheswoi_82 патриот25.02.25 12:00
NEW 25.02.25 12:00 
в ответ uscheswoi_82 25.02.25 11:58

Опечатка, вот так:

...
public Зверь(String кличка, int возраст) {
    this.кличка = кличка;
    this.возраст = возраст;
}
...
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#8 
uscheswoi_82 патриот25.02.25 16:17
NEW 25.02.25 16:17 
в ответ uscheswoi_82 25.02.25 12:00

А можно теперь делать вот так:

...
Зверь кот = new Зверь();
кот.УстановитьЗначения(кличка:"Боб", возраст:1);
кот.Вывод();
кот.УстановитьЗначения("Боб", возраст:1);
кот.Вывод();
...


Результат:

Меня зовут Боб, и мне 1 год.
Меня зовут Боб, и мне 1 год.
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#9 
uscheswoi_82 патриот25.02.25 16:23
NEW 25.02.25 16:23 
в ответ uscheswoi_82 25.02.25 16:17

Полный код:

public class Program {
  class Зверь {
    public String кличка;
    public int возраст;

    public Зверь() {}

    public Зверь(String кличка, int возраст) {
      this.кличка = кличка;
      this.возраст = возраст;
    }
 
    public void УстановитьЗначения(String кличка, int возраст) {
      this.кличка = кличка;
      this.возраст = возраст;
    }
 
    private String ГодИлиГода() => возраст > 0 && возраст < 2 ? $"год." : $"года.";
    private String ПроверкаВозраста() => возраст < 5 ? $"{возраст} {ГодИлиГода()}" : $"{возраст} лет.";
    public void Вывод() => Console.WriteLine($"Меня зовут {кличка}, и мне {ПроверкаВозраста()}");
  }
 
  public static void Main() {
    Зверь кот = new Зверь();
    кот.УстановитьЗначения(кличка:"Боб", 1);
    кот.Вывод();
    кот.УстановитьЗначения("Боб", возраст:1);
    кот.Вывод();
    кот.УстановитьЗначения(кличка:"Боб", возраст:1);
    кот.Вывод();
  }
}


Результат работы программы:

Меня зовут Боб, и мне 1 год.
Меня зовут Боб, и мне 1 год.
Меня зовут Боб, и мне 1 год.
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#10 
uscheswoi_82 патриот25.02.25 16:46
NEW 25.02.25 16:46 
в ответ uscheswoi_82 25.02.25 16:23

Типы значений допускающие значение NULL. Обычно как, если в переменной значение NULL, то происходит ошибка, чтобы не было ошибки нужно писать блок try-catch. В C# имхо где-то начиная с версии 4.0 можно писать так тип_данных?, например int? age, string? firstname; вот пример:

using System;
public class Program {
  class Человек {
    public String? Имя { get; set; }
    public String? Фамилия { get; set; }
  }
  public static void Main(string[] args) {
    Человек чел = new Человек() { Имя = "Антон", Фамилия = null};
    Человек чел2 = new Человек() { Имя = null, Фамилия = "Попов"};
    Console.WriteLine($"{чел.Имя} {чел.Фамилия}");
    Console.WriteLine($"{чел2.Имя} {чел2.Фамилия}");
  }
}



Результат:

Антон
 Попов



Ещё пример, где может реально произойти ошибка, пример с математической операцией:

using System;

public class Program {
  public static void Main(string[] args) {
    int? a = 3;
    int? b = null;
    int? c = a + b;
    Console.WriteLine($"{a}+{b}={c}");
  }
}



Результат:

3+=
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#11 
uscheswoi_82 патриот27.02.25 10:28
NEW 27.02.25 10:28 
в ответ uscheswoi_82 25.02.25 16:46

Продолжу баловаться. В Visual Basic и в Си++ в MFC есть такия функции/методы Left, Right, Mid. В C# этот метод называется Substring.

Вот к примеру:

using System;
public class Program {
  public static void Main(string[] args) {
    String мишка = "Мишка медведь";
    Console.WriteLine($"{мишка.Substring(0, 5)}");
  }
}



Результат:

Мишка
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#12 
uscheswoi_82 патриот27.02.25 10:36
NEW 27.02.25 10:36 
в ответ uscheswoi_82 27.02.25 10:28

В Visual Basic и в PHP есть функция split, и explode (для Visual Basic, для PHP) в C# есть метод Split.

Пример:

using System;
public class Program {
  public static void Main(string[] args) {
    String мишка = "Мишка медведь";
    String[] результаты = мишка.Split(' ');
    foreach(var р in результаты)
      Console.WriteLine($"{р}");
  }
}



Результат:

Мишка
медведь
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#13 
uscheswoi_82 патриот7 дней назад, 13:30
NEW 7 дней назад, 13:30 
в ответ uscheswoi_82 27.02.25 10:36

Поговорим про события в C#. Вот один из примеров для вызова события:

using System;
                    
public class Program {
  public class СобытиеМедведьКушает : EventArgs {}
 
  public interface ИнтерфейсМедведь {
    event EventHandler<СобытиеМедведьКушает> МедведьКушает;
  }
 
  public class Медведь : ИнтерфейсМедведь {
    public event EventHandler<СобытиеМедведьКушает> МедведьКушает;


    public void Кормить() {
      МедведьКушает.Invoke(this, new СобытиеМедведьКушает());
    }
  } 

  public static void КушайМишка(object sender, СобытиеМедведьКушает с) {
    Console.WriteLine("Мишка кушает!");
  }

  public static void Main(string[] args) {
    Медведь мишка = new Медведь();
    мишка.МедведьКушает += КушайМишка;
    мишка.Кормить();
    мишка.Кормить();
  }
}


Результат:

Мишка кушает!
Мишка кушает!
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#14 
uscheswoi_82 патриот6 дней назад, 07:35
NEW 6 дней назад, 07:35 
в ответ uscheswoi_82 7 дней назад, 13:30, Последний раз изменено 6 дней назад, 07:36 (uscheswoi_82)

В C# так-же как и в Java чтобы знать равна строка нужно использовать метод Equals. Если написать так:

using System;
public class Program {
  public static void Main(string[] args) {
  String строка = "Миша";        
  if(строка.Equals("Миша") == true)
    Console.WriteLine("Да, это миша");
  else 
    Console.WriteLine("Нет, это не миша");
  if(строка.ToLower().Equals("миша") == true)
    Console.WriteLine("Да, это миша");
  else 
    Console.WriteLine("Нет, это не миша");
  }
}



То результат такой:

Да, это миша
Да, это миша



А если же вот так написать:

using System;
public class Program {
  public static void Main(string[] args) {
  String строка = "миша";        
  if(строка.Equals("Миша") == true)
    Console.WriteLine("Да, это миша");
  else 
    Console.WriteLine("Нет, это не миша");
  if(строка.ToLower().Equals("миша") == true)
    Console.WriteLine("Да, это миша");
  else 
    Console.WriteLine("Нет, это не миша");
  }
}


То результат такой:

Нет, это не миша
Да, это миша
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#15 
uscheswoi_82 патриот5 дней назад, 14:08
NEW 5 дней назад, 14:08 
в ответ uscheswoi_82 6 дней назад, 07:35

Теперь поииграемся в LINQ:

Вот код:

using System;
using System.Linq;
                    
public class Program {
  public enum ПОЛ {
  Самка, 
  Самец 
  };
 
  class Зверюшка {
    public int Зоопарк_ID { get; set; }
    public ПОЛ Пол { get; set; }
    public String Кличка { get; set; }
    public int Возраст { get; set; }
  }
 
  class Зоопарк {
    public int Зоопарк_ID { get; set; }
    public String Название { get; set; } 
    public String Город { get; set; }
  }
 
  public static void Main(string[] args) {
    Зверюшка[] зверюшки = {new Зверюшка() { Зоопарк_ID = 1, 
      Пол = ПОЛ.Самка, 
      Кличка = "Пушинка", 
      Возраст = 3},
    new Зверюшка() { Зоопарк_ID = 1, 
      Пол = ПОЛ.Самец, 
      Кличка = "Медвежонок", 
      Возраст = 1}
    };
    Зоопарк[] зоопарки = { new Зоопарк() { Зоопарк_ID = 1, 
    Город = "Марсианская впадена", 
    Название = "Зоопарк \"марсианской впадене\"" }
    };
    var результат = from зо in зоопарки join 
    зв in зверюшки on зо.Зоопарк_ID equals зв.Зоопарк_ID 
    select new { зо.Город, зо.Название, зв.Пол, зв.Кличка, зв.Возраст } ;
    foreach(var р in результат) {
      Console.WriteLine($"город = {р.Город}, название зоопарка = {р.Название}" + 
      $", пол зверюшки = {р.Пол}, кличка зверюшки = {р.Кличка}, " +
      $"возраст зверюшки = {р.Возраст}");
    }
  }
}



а вот результат работы кода:

город = Марсианская впадена, название зоопарка = Зоопарк "марсианской впадене", пол зверюшки = Самка, кличка зверюшки = Пушинка, возраст зверюшки = 3
город = Марсианская впадена, название зоопарка = Зоопарк "марсианской впадене", пол зверюшки = Самец, кличка зверюшки = Медвежонок, возраст зверюшки = 1
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#16