Балуюсь в сирешотку 25.02.2025
Всем привет! Скучно, и хочу баловаться в современную сирешотку.
Моя ФЛ Он и ОнаСтруктуры...
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 года/лет.
Моя ФЛ Он и ОнаУлучшу код...
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 лет.
Моя ФЛ Он и ОнаВозвращение множество значений. В 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
Моя ФЛ Он и ОнаНет в Python вот так:
def get_information(): return ["Антон", "Попов", 43] firstname, lastname, age = get_information() print(firstname, lastname, age)
Моя ФЛ Он и ОнаОпечатка в 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);
?>
Моя ФЛ Он и ОнаИменованные параметры/аргументы, вот примет:
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 год.
Моя ФЛ Он и ОнаОпечатка, вот так:
...
public Зверь(String кличка, int возраст) {
this.кличка = кличка;
this.возраст = возраст;
}
...
Моя ФЛ Он и ОнаА можно теперь делать вот так:
...
Зверь кот = new Зверь();
кот.УстановитьЗначения(кличка:"Боб", возраст:1);
кот.Вывод();
кот.УстановитьЗначения("Боб", возраст:1);
кот.Вывод();
...
Результат:
Меня зовут Боб, и мне 1 год. Меня зовут Боб, и мне 1 год.
Моя ФЛ Он и ОнаПолный код:
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 год.
Моя ФЛ Он и ОнаТипы значений допускающие значение 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+=
Моя ФЛ Он и ОнаПродолжу баловаться. В 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)}");
}
}
Результат:
Мишка
Моя ФЛ Он и ОнаВ 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($"{р}");
}
}
Результат:
Мишка медведь
Моя ФЛ Он и ОнаПоговорим про события в 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 Медведь();
мишка.МедведьКушает += КушайМишка;
мишка.Кормить();
мишка.Кормить();
}
}
Результат:
Мишка кушает! Мишка кушает!
Моя ФЛ Он и ОнаВ 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("Нет, это не миша");
}
}
То результат такой:
Нет, это не миша Да, это миша
Моя ФЛ Он и ОнаТеперь поииграемся в 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
Моя ФЛ Он и ОнаТеперь поговорим про мистера Тред и ассинхронность (await, async):
Пример кода мистера Треда:
using System;
using System.Threading;
public class Program {
public static void Процесс() {
Console.WriteLine("Привет от процесса!");
}
public static void Main(string[] args) {
Thread t = new Thread(Процесс);
t.Start();
}
}
Результат работы прогарммы:
Привет от процесса!
Пример ассинхронно работание программы:
using System;
using System.Threading;
using System.Threading.Tasks;
public class Program {
async static Task Main(string[] args) {
await АссинхронноВыполняется();
Console.WriteLine("Запуск программы.");
void АссинхронныйВыводНаЭкран() {
Thread.Sleep(3000);
Console.WriteLine("Гав-гав!");
}
async Task АссинхронноВыполняется() {
Console.WriteLine("Запуск ассинхронно.");
await Task.Run(АссинхронныйВыводНаЭкран);
Console.WriteLine("Конец ассихронного запуска.");
}
}
}
Результат работы программы:
Запуск ассинхронно. Гав-гав! Конец ассихронного запуска. Запуск программы.
Моя ФЛ Он и Она
список