64.87K
Category: programmingprogramming

С#. Дополнительная информация (лекция 2)

1.

С#
Дополнительная информация

2.

var
public class MyBestSuperPowerlessCheapPen
{
}
MyBestSuperPowerlessCheapPen pen = new MyBestSuperPowerlessCheapPen();
ИЛИ
var pen = new
MyBestSuperPowerlessCheapPen();
var i = 10; // int
var l = 10l; // long

3.

var
public class MyBestSuperPowerlessCheapPen
{
}
public class Pencil : MyBestSuperPowerlessCheapPen
{
}
var pen1 = new MyBestSuperPowerlessCheapPen();
var pencil = new Pencil();
var pen2 = (MyBestSuperPowerlessCheapPen)new Pencil();
// лучше
MyBestSuperPowerlessCheapPen pen3 = new Pencil();

4.

Лямбды
public class Paper
{
public void Draw(Pen pen)
{
pen.OnDrawDone += PenOnOnDrawDone;
pen.Draw();
}
private void PenOnOnDrawDone(int size)
{
Console.WriteLine("Draw {size}", size);
}
}
// Ламбда-выражения
(список_параметров) => выражение;

5.

Лямбды
public class Paper
{
public void Draw(Pen pen)
{
pen.OnDrawDone += (size) =>
{
Console.WriteLine("Draw {size}", size);
};
pen.Draw();
}
}

6.

Records
public record Pencil(int Size)
{
public int Size { get; init; } = Size;
}
public record Pencil(int Size);
var p1 = new Pencil (100);

7.

Using и IDisposable
public class Pen : IDisposable
{
public int Size { get; set; }
public void Dispose()
{
//Dispose
}
}
Pen? pen = null;
try
{
pen = new Pen();
}
finally
{
pen?.Dispose();
}

8.

Using и IDisposable
using (var pen = new Pen())
{
}
//или
using (var pen = new Pen());

9.

Методы расширения
public static class Extensions
{
public static IList<T> AddTo<T>(this T item, IList<T> collection)
{
collection.Add(item);
return collection;
}
public static void Print<T>(this IEnumerable<T> collection)
{
foreach (var item in collection)
{
Console.WriteLine(item);
}
}
}

10.

Задачи
public class Pen
{
public int Size { get; set; }
public void Draw(int time)
{
Size--;
Task.Delay(time);
}
}

11.

Задачи
public class Pen
{
public int Size { get; set; }
public Task Draw(int time)
{
Size--;
return Task.Delay(time);
}
}

12.

Задачи
public class Pen
{
public int Size { get; set; }
public async void Draw(int time)
{
Size--;
await Task.Delay(time);
}
}

13.

Задачи
public class Pen
{
public int Size { get; set; }
public async Task Draw(int time)
{
Size--;
await Task.Delay(time);
}
}

14.

Обработка ошибок в асинхронных методах
public static class TaskExceptions
{
public static async Task Test()
{
Console.WriteLine($"Main thread Processor ID: {Thread.GetCurrentProcessorId()}");
TaskTest();
await Task.Delay(200);
Console.WriteLine("Done");
}
private static void TaskTest()
{
Task.Run(async () => {
Console.WriteLine("Task started");
await Task.Delay(100);
var processorId = Thread.GetCurrentProcessorId();
Console.WriteLine($"Task Processor ID: {processorId}");
if (processorId % 2 == 0)
throw new Exception("oh");
Console.WriteLine("Task finished");
});
}
}

15.

С#
Тестовые задания

16.

Что будет выведено на консоль?
Console.WriteLine(~0 << 2);
// -100
// -4
// -1
// 0
// 1
// 4
// 100

17.

Что будет выведено на консоль?
private static IEnumerable<int> GetInts()
{
yield return 1;
yield return 2;
Console.WriteLine(3);
}
Console.WriteLine(GetInts().Last());
// 1
// 2
// 3 3 2
// 3 2

18.

Что будет выведено на консоль?
public class HString
{
private const int initSize = 64;
private StringBuilder sb;
private void Init(int iniSize) => sb = new StringBuilder(iniSize);
public HString() => Init(initSize);
public HString(int iniSize) => Init(initSize);
public StringBuilder StringBuilder => sb;
}
Console.WriteLine(new HString(256).StringBuilder.Capacity);

19.

Что будет выведено на консоль?
class Amplifier
{
public string ModelName = 123;
public int Volume = string.Empty;
public Amplifier()
: this("Model X", 69)
{
}
public Amplifier(string modelName, int volume)
: this()
{
ModelName = modelName;
Volume = volume;
}
}
var a = new Amplifier();
Console.WriteLine(a.Volume);

20.

Что будет выведено на консоль?
public static void Task3(IComparable[] objects, int left, int right)
{
int i = left, j = right;
IComparable pivot = objects[(left + right) / 2];
while (i <= j)
{
while (objects[i].CompareTo(pivot) < 0)
i++;
while (objects[j].CompareTo(pivot) > 0)
j--;
if (i <= j)
(objects[i], objects[j]) = (objects[j], objects[i]);
i++; j--;
}
if (left < j)
Task3(objects, left, j);
if (i < right)
Task3(objects, i, right);
}
Sample[] array = [3, 5, 1, 4, 6, 2];
Task3(array, 0, 2);
array.Show();

21.

Что будет выведено на консоль?
public class BaseStorage
{
private List<double> _list = new();
public class ItemsStorage : BaseStorage
{
public int Count { get; private set; } = 0;
public override void Add(double element)
{
Count++;
base.Add(element);
}
public virtual void Add(double element)
=> _list.Add(element);
public virtual void AddAll(IEnumerable<double>
elements)
{
foreach (var element in elements)
Add(element);
}
}
public override void AddAll(IEnumerable<double> e)
{
Count += e.Count();
base.AddAll(e);
}
}
ItemsStorage myStorage = new ();
myStorage.AddAll(new List<double>(){1,2,3});
Console.WriteLine(myStorage.Count);
English     Русский Rules