165.11K
Категория: ПрограммированиеПрограммирование

С#. Базовая информация (лекция 1)

1.

С#
Базовая информация

2.

Данные
ПЕРЕМЕННЫЕ
Значимые типы
Ссылочные типы

3.

Данные
ПЕРЕМЕННЫЕ
Литерал
bool
true, false
byte, sbyte
255, -127, 0xFF
short, ushort
-32768, 65535,
System.ValueType
Значимые типы
int, uint
u
-2147483648, 4294967295
long, ulong
l, ul
1l, 18446744073709551615
float, double
f, d
1e-18, 1d
decimal
m
19e20, 1.111111
char
DateTime
enum
struct
void
‘A’m ‘\n’, ‘0x78’, ‘\u0420’
Ссылочные типы

4.

Данные
ПЕРЕМЕННЫЕ
Литерал
Ссылочные типы
bool
true, false
System.Object
null
byte, sbyte
255, -127
String
“Hello world!”
short, ushort
-32768, 65535
System.Array
System.ValueType
Значимые типы
int, uint
u
-2147483648, 4294967295
*Интерфейсы
long, ulong
l, ul
1l, 18446744073709551615
*Делегаты
float, double
f, d
1e-18, 1d
*Классы
decimal
m
19e20, 1.111111
char
DateTime
enum
struct
void
‘A’m ‘\n’, ‘0x78’, ‘\u0420’

5.

Операторы
АРИФМЕТИЧЕСКИЕ
+
-
/
*
%
++
--

6.

Операторы
АРИФМЕТИЧЕСКИЕ
+
-
/
*
%
++
|
^
~
<<
>>
ПОБИТОВЫЕ
&
--

7.

Операторы
АРИФМЕТИЧЕСКИЕ
+
-
/
*
%
++
|
^
~
<<
>>
-=
*=
/=
%=
--
ПОБИТОВЫЕ
&
ПРИСВАИВАНИЕ
=
+=

8.

Операторы
АРИФМЕТИЧЕСКИЕ
+
-
/
*
%
++
|
^
~
<<
>>
+=
-=
*=
/=
%=
!=
<
>
<=
>=
--
ПОБИТОВЫЕ
&
ПРИСВАИВАНИЕ
=
СРАВНЕНИЕ
==

9.

Операторы
АРИФМЕТИЧЕСКИЕ
+
-
/
*
%
++
|
^
~
<<
>>
+=
-=
*=
/=
%=
!=
<
>
<=
>=
&&
!
--
ПОБИТОВЫЕ
&
ПРИСВАИВАНИЕ
=
СРАВНЕНИЕ
==
ЛОГИЧЕСКИЕ
||

10.

Операторы
АРИФМЕТИЧЕСКИЕ
+
-
/
*
%
++
|
^
~
<<
>>
+=
-=
*=
/=
%=
!=
<
>
<=
>=
&&
!
--
ПОБИТОВЫЕ
&
ПРИСВАИВАНИЕ
=

СРАВНЕНИЕ
==
ЛОГИЧЕСКИЕ
||
null-УСЛОВНЫЕ ОПЕРАТОРЫ И ПРОВЕРКИ ТИПА И ВЫРАЖЕНИЯ ПРИВЕДЕНИЯ
??
?.
!.
?[]
is
as
?:

11.

Условные конструкции и циклы
УСЛОВНЫЕ
If, else
switch
break
goto case
return
throw
ЦИКЛЫ
for
break
foreach
continue
while
do while

12.

Данные
CODE
STACK
HEAP
public int Foo(int a)
{
int b = a + 10;
return b;
}

13.

Данные
CODE
STACK
HEAP
public int Foo(int a)
{
int b = a + 10;
return b;
}
int a
Foo

Начало фрейма

14.

Данные
CODE
STACK
HEAP
public int Foo(int a)
{
int b = a + 10;
return b;
}
int b
int a
Foo

15.

Данные
CODE
STACK
HEAP
public int Foo(int a)
{
int b = a + 10;
return b;
}
int b
int a
Foo

16.

Данные
CODE
STACK
HEAP
public int Foo(int a)
{
int b = a + 10;
return b;
}

17.

Данные
CODE
STACK
HEAP
object a = 10;
object a

18.

Данные
CODE
STACK
HEAP
object a = 10;
int 10
object a

19.

Данные
CODE
STACK
HEAP
object a = 10;
int 10
object a

20.

Данные
CODE
STACK
HEAP
object a = 10;
object b = 10;
int 10
int 10
object b
object a

21.

Данные
CODE
STACK
HEAP
object a = 10;
object b = 10;
object c = a;
int 10
int 10
object c
object b
object a

22.

Данные
CODE
STACK
HEAP
object a = 10;
object b = 10;
object c = a;
a = 20;
int 10
int 10
object c
object b
object a

23.

Данные
CODE
STACK
HEAP
object a = 10;
object b = 10;
object c = a;
a = 20;
int 10
int 10
object c
object b
object a

int 20

24.

Данные
CODE
STACK
HEAP
public class Pen{}
public void Foo()
{
var pen = new Pen();
}

25.

Данные
CODE
STACK
HEAP
public class Pen{}
public void Foo()
{
var pen = new Pen();
var pen2 = pen;
}
Pen
Pen pen

26.

Данные
CODE
STACK
HEAP
public class Pen{}
public void Foo()
{
var pen = new Pen();
var pen2 = pen;
pen = null;
}
Pen pen2
Pen pen

Pen

27.

Данные
CODE
STACK
HEAP
public class Pen{}
public void Foo()
{
var pen = new Pen();
var pen2 = pen;
pen = null;
pen = new Pen();
}
Pen pen2
Pen pen

Pen

28.

Данные
CODE
STACK
HEAP
public class Pen{}
public void Foo()
{
var pen = new Pen();
var pen2 = pen;
pen = null;
pen = new Pen();
}
Pen
Pen pen2
Pen pen

Pen

29.

Данные
CODE
STACK
HEAP
public class Pen{}
Pen
Pen

30.

Данные
CODE
STACK
HEAP
public class Pen{}

31.

Данные
CODE
STACK
HEAP
public class Pen{}
public void Foo()
{
var a = new Pen();
Bar(a);
}
public void Bar(Pen a)
{
a = new Pen();
}

32.

Данные
CODE
STACK
HEAP
public class Pen{}
public void Foo()
{
var a = new Pen();
Bar(a);
}
public void Bar(Pen a)
{
a = new Pen();
}
Pen
Pen a
Foo

33.

Данные
CODE
STACK
HEAP
public class Pen{}
public void Foo()
{
var a = new Pen();
Bar(a);
}
public void Bar(Pen a)
{
a = new Pen();
}
Pen a
Bar
Pen a
Foo

Pen

34.

Данные
CODE
STACK
HEAP
public class Pen{}
public void Foo()
{
var a = new Pen();
Bar(a);
}
public void Bar(Pen a)
{
a = new Pen();
}
Pen
Pen a
Bar
Pen a
Foo

Pen

35.

Данные
CODE
STACK
HEAP
public class Pen{}
public void Foo()
{
var a = new Pen();
Bar(a);
}
public void Bar(Pen a)
{
a = new Pen();
}
Pen
Pen
Pen a
Foo

36.

Данные
CODE
STACK
HEAP
public class Pen{}
public void Foo()
{
var a = new Pen();
Bar(a);
}
public void Bar(Pen a)
{
a = new Pen();
}
Pen
Pen

37.

Данные
CODE
STACK
HEAP
public class Pen{}
Pen
Pen

38.

Данные
CODE
STACK
HEAP
public class Pen{}

39.

Массивы
тип_перемнной[] имя_массива;
int[] array0 = new int[1];
int[,] array1 = new int[2, 3];
int[,] array2 = { {0, 1}, {2, 3, 4} };

40.

Перечисления
enum ВремяГода : byte
{
Зима,
Весна,
Лето,
Осень
}

41.

Кортежи
var tuple = (5, 10);
private static (string name, int age) GetTuple((string n, int a) tuple, int x)
{
var result = (name: tuple.n, age: tuple.a + x);
return result;
}

42.

Методы
[модификаторы] тип_возвращаемого_значения ИмяМетода ([параметры])
{
// тело метода
}
Параметры:
- ref
- in
- out
- params

43.

Модификаторы доступа
- public
- internal
- protected
- private
- private protected
- protected internal

44.

Классы
namespace Lesson1;
public class Pen
{
}

45.

Поля и методы класса
namespace Lesson1;
public class Pen
{
private int _size;
public int get_Size()
{
return _size;
}
public void set_Size(int size)
{
_size = size;
}
public void Draw(int size = 1)
{
_size -= size;
}
}

46.

Свойства
namespace Lesson1;
public class Pen
{
public int Size { get; set; }
public void Draw(int size = 1)
{
Size -= size;
}
}

47.

Пользовательские свойства
public class Pen
{
public int Size { get; set; }
private float _weight { get; set; }
public float Weight
{
get
{
return _weight;
}
set
{
_weight = value;
}
}
}

48.

Пользовательские свойства
public class Pen
{
public int Size { get; set; }
private float _weight { get; set; }
public float Weight
{
get => _weight;
set => _weight = value;
}
}

49.

Конструкторы класса
public class Pen
{
public int Size { get; set; }
public Pen()
{
Size = 100;
}
public Pen(int size)
{
Size = size;
}
public Pen(Pen pen)
{
Size = pen.Size;
}
}

50.

Наследование
public abstract class Pen
{
public int Size { get; set; }
private int _weight = 0;
protected float Price = 10;
}
public sealed class Pen2 : Pen
{
public Pen2()
{
Size = 10;
Price = 20;
_weight = 0; // Ошибка
}
}

51.

Абстрактные классы
public abstract class Pen
{
public int Size { get; set; }
public abstract int Draw();
}
public class Pen2 : Pen
{
public override int Draw()
{
return Size--;
}
}

52.

Виртуальные методы
public class Pen
{
public int Size { get; set; }
public virtual int Draw()
{
return Size--;
}
}
public class Pen2 : Pen
{
public override int Draw()
{
return Size--;
}
}

53.

Скрытие
public class Pen
{
public int Size { get; set; }
public int Draw()
{
return Size--;
}
}
public class Pen2 : Pen
{
public new int Draw()
{
return Size -= 2;
}
}

54.

Конструкторы при наследовании
public class Pen
{
public int Size { get; set; }
public Pen(int size)
{
Size = size;
}
}
public class Pen2 : Pen
{
public Pen2() : base(100)
{
}
}

55.

base и this
public class Pen
{
public int Size { get; set; }
}
public class Pen2 : Pen
{
public new int Size { get; set; }
public void Draw()
{
this.Size--;
base.Size--;
}
}

56.

Инициализация объектов класса
class Program
{
public static void Main(string[] args)
{
var p = new Pen();
p.Size = 100;
var p1 = new Pen{ Size = 100 };
}
}

57.

Обобщения
public class Pen<T>
{
public T Size { get; set; }
public virtual T Set<TD>(TD something)
{
if (something is T size)
{
Size = size;
}
return Size;
}
}

58.

Обобщения и наследование
public class Pencil : Pen<int>
{
public override int Set<TD>(TD
something)
{
return something is int
? Size
: 0;
}
}
public class Pencil<T> : Pen<T>
{
public override T Set<TD>(TD
something)
{
return (something is T s
? Size = s
: default)!;
}
}

59.

Интерфейсы
public interface IPen
{
int Size { get; set; }
void Draw();
}
public class Pen : IPen
{
public int Size { get; set; }
public void Draw()
{
Size--;
}
}

60.

Множественная реализация интерфейсов
public interface IPen
{
int Size { get; set; }
}
public interface ITool
{
void Draw();
}
public class Pen : IPen, ITool
{
public int Size { get; set; }
public void Draw()
{
Size--;
}
}

61.

Делегаты
public delegate void DrawDelegate1();
public delegate void DrawDelegate2(int size);
public class Pen
{
public int Size { get; set; }
public void Draw(DrawDelegate1 how1, DrawDelegate2 how2)
{
how1();
how2(Size);
}
}

62.

Action, Predicate, Func
public class Pen
{
public int Size { get; set; }
public void Draw(Action how1, Action<int> how2)
{
how1();
how2(Size);
}
public void Foo(Predicate<int> p, Func<int> f1, Func<int, int> f2)
{
bool b = p(Size);
int s1 = f1();
int s2 = f2(Size);
}
}

63.

Подписка и отписка
public class Pen
{
public int Size { get; set; }
public void Draw(Action how1, Action<int> how2)
{
how1();
how2(Size);
}
public void Foo()
{
Action<Action, Action<int>> how = Draw;
how += Draw;
how -= Draw;
}
}

64.

События
public class Pen
{
public int Size { get; set; }
private Action<int> _drawDone;
public event Action<int> OnDrawDone
{
add => _drawDone += value;
remove => _drawDone -= value;
}
public void Draw()
{
Size--;
_drawDone(Size);
}
}

65.

События
public class Pen
{
public int Size { get; set; }
public event Action<int> OnDrawDone;
public void Draw()
{
Size--;
OnDrawDone(Size);
}
}

66.

События
public class Pen
{
public int Size { get; set; }
public event Action<int> OnDrawDone;
public void Draw()
{
Size--;
OnDrawDone?.Invoke(Size);
}
}

67.

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

68.

Лямбды
public class Paper
{
public void Draw(Pen pen)
{
pen.OnDrawDone += (size) =>
{
Console.WriteLine("Draw {size}", size);
};
pen.Draw();
}
}
English     Русский Правила