Uploaded by Eren 45

конспект

advertisement
N!=1*2*3*4*n:
Int fact(int n)
{
If(n=1) return 1
Else return (n*fact(n-1))
}
Перечисление enum
Перечисление представляет собой набор логически связанных констант
Enum { 2,4,5,8 }
Каждое перечисление фактически определяет новый тип данных с помощью которого можно
определяет переменные методы и константы
Const daytime dt = daytime.morning;
public enum Colors
{
Red = 0,
Blue = 1
}
If(dt==daytime.morning)console.writeline(утро)
Используется для хранения состояния
Switch
{
case morning: console.writeline(“Utro masafaka”);
Case night: console.writeline(“poshel spat’ ska”)
Null = daytime night
Константы переменной могут иметь тип
Enum time: byte
Тип данных может быть только целочисленный по умолчанию стоит int
Дело в том что все в структуре по дефакту все пронумеровано от 0
Console.writeline ((int)now)
\(0_0)/
Статика (static)
Можно применять К полям к свойствам к методам к операторам событиям конструкторам и
классам.
Статика подрузамевает что вам не нужно объявлять экземпляр классов
Если весь класс сделать статическим то
1.
2.
3.
4.
Нельзя создавать экземпляр класса исп. New
Не разрешается использовать нестатические члены этого же класса
Он не поддерживает наследование
Невозможно перегрузить методы
Public static login
Programm.login = textbox1.Text
Programm.Login = label.text
Unit тестирование – разновидность тестирования в программной разработке которая заключается
в проверке работоспособности отдельных функциональных модулей процессов или частей кода
приложения позволяет избежать ошибок или быстро исправить их или быстро исправить их при
обновлении или добавлении по новыми компонентами не тратя время на проверку по в целом
Легче протестировать добавляемые функции отдельно в изоляции а после удаления всех багов
интегрировать в программу
Manual test
System test
Integration test
Components test
Unit test
Unit тестирование применяется к изолированным фрагментам кода поэтому может выявить
ошибки только проверяемого модуля оно не способно показать баги возникающие при
интеграции модуля с другими компонентами
Рассмотрим простой пример по созданию юнит теста для этого создадим консольное calc которая
числа суммировать
Namespace calc
Public class cupcul
Public duble div
Double n1
double n2
if(n1==n2)
double n1
double n2
добавить – unittestproject – netframework
Поразрядные операции
Они выполняются на отдельными разрядами числа в двоичном представлении
1.) Логическое умножение ( & ) умножение происходит поразрядно и если у обоих операндов
значение разрядов равно 1 то операция возвращает 1 иначе 0
Int x = 2; 010
Int y = 5; 101
Console.Writeline (x & y) ;110
2.) Логическое сложение ( | ) возвращает 1 если 1
X = 4; 100
Y= 5; 101
Console.Writeline (x|y);
3.) Логическое исключающее или (^ xor)
Int x= 5;
Int key = 102
Int incript = x ^ key
Int decript = incript ^ key
4.) Инверсия ( ~ ) логическое отрицание
Int x = 12;00001100
Console.writeline (~x)
Для записи чисел со знаком в c# применяется дополнительный код он же true component
при котором старший разряд является знаковым 0-положительное 1-отрицательное
5.) Операция сдвига возможна либо влево либо вправо
X << y сдвигает число x влево на y разрядов 4<<1 = 8 ( (4)100 – > 1000(8))
X >> y сдвигает число x вправо на y разрядов 16>>1 = 8
6.) Передача параметров посылки по значению void incr (int x)
{x++ console.writeline
}
7.) Передача параметров по ссылке с помощью (ref)
{ref++
}
Int number = 5
Console.writeline (number)
Incr ref number
Console writeline (number)
При передаче значений параметрам по ссылке метод получает адрес переменой в памяти
и таким образом если в методе меняется значение параметра передаваемого по ссылке то
так же меняется и значение переменной
8.) Выходной параметр out метод вычесления суммы который принимает значения x y
out int result
result = x+y
out a, out b
9.) Входной параметр in модификатор указывает что данный параметр будет передаваться в
метод по ссылке но внутри метода его изменить нельзя
Преобразование типов
Сужающиеся и расширяющиеся преобразования
Byte A=4; 100
UShort b=a;(занимает 2 байта) 0000000100
8 бит до 16(расширяющийся)
Ushort a=4;
Byte b=(byte)a; (сужающие преобразование)
Неявные преобразования если производится преобразования от беззнакового типа меньшей
разрядности к беззнаковому типу большей разрядности
ZerоAcstantion дополнение нулями
Если происходит преобразование к знаковому типу то битовое представление доп нулями если
пол и 1 если отриц
Явное преобразование
Int a=4
Int b=6
Byte c=(byte)(a+b)
Такой тип называется явным но он делится на явный и неявный
Int=>double неявное
Char=>int
Потеря данных и checked
Checked нужен для того чтобы избежать ошибок в ситуациях когда мы незнаем чему равны
значения чисел при его использовании приложение вызывает исключение о переполнении
используют try catch
Массив параметров и ключевое слово params
Void sum(params int []n)
Значимый и ссылочные типы данных
Object,string,class,interface,delegate
Целочисл типы от byte до ulong
Длч того чтобы понять различия между значимыми и ссылочными типами надо знать
организацию памяти в .net Память делится на 2 типа stack and heap Параметры и переменные
метода которые представляют типы значений размещают своё значение в stack Время жизни
переменных таких типов ограничена их контекстом и физ стек это всего лишь некоторая область
памяти в адресном пространстве Когда программа тольуо запускается на выполнения в конце
блока памяти зарезирвированного для стека устанавл указатель стека при пермещении данных в
стек указатель переустанавл таким образом что снова указывает на новое свободн место
При вызове каждого отдельного метода в стеке будет выделятся область памяти(frame стека) где
будут хранится значения его параметров и переменых
Main(string[] args)
}
}
При запуске такой программы в стеке будут определятся два фрейма – для метода мейн
И для метода calc
Если параметр или переменная метода представляет тип значения то в стеке будет хранится
значение параметра
Cоставные типы
Рассмотрим ситуацию где значимый и ссылочный тип составляют собой составные типы
Таким образом в стеке окажутся все поля структурой st и ссылка на объекты contry
Копирование значений
При присвоении объекта значимого типа он получает копию данных а при присвоении данных
ссылочного типа он получает не копию объекта а ссылку на этот объект в хипе
St2.x=1
St2.y=2
St1=st2
St2.x=5
Cwr(st1.x,st2.x);(1;5)
Так ка ст1 структура то при присвоении ст1=ст2 она получает копию структуры ст2 а объект класса
с1 при присвоении с1=с2 получает ссылку на тот же объект на который указывает с2 поэтому с
изменением с2 будет и меняться с1
Объекты классов как параметры методов организацию объектов памяти следует учитывать при
передаче параметров по значению и по ссылке. Если параметры методов представляют объекты
классов то использование параметров имеет некоторые особенности
При передачи объекта класса по значению в метод передаётся копия ссылки на объект эта копия
указывает на тот же объект что и исходная ссылка потому мы можем изменить отдельные поля и
свойства объекта но не можем изменить сам объект person.name=a а другая
person=new person(name=Bill) Создаст новый объект в памяти и будет указывать на новый объект
поэтому если мы его изменим то это ни как не повлияет на ссылку p в методе main тк она всё ещё
указывает на старый объект в памяти но при передачи параметров по ссылке с помощью ref то у
нас в Cwr(
то есть операция new создаст новый объект в памяти и теперь ссылка person(как и ссылка p bp из
метода main)
Пространство имён
Обычно в c# определенные классы и другие типы не существуют сами по себе а заключаются в
спец контейнеры – пространство имен (позволяет организовать код программы в логические
блоки то есть позволяют объединить и отделить от остального кода некоторую функциональность
Для определения используется ключевое слово namespace после чего идет его название
Подключение пространства имен
Обращаться к пространству имен можно также как и к методу в классе но это избыточность но
есть второй путь подключить пространство имен с помощью директивы using
Namespace sharaga;
Class student;
String name;
Public void print () => Console.Writeline (name)
Using sharaga;
Student (переменная) = new student ();
Null и ссылочные типы
Кроме стандартного значения типа чисел и строк в си шарпе имеется спец значение null которая
фактически указывает на отсутствие значения как такового отсутствия данных по версии 8.0 всем
ссылочным типам присваивался null но позже была введена концепция ссылочных nullable типов
Nullable aware context в котором и можно использовать ссылочные nullabel типы чтобы
определить переменную параметра ссылочного типа.
String? name = null;2
Null и значимые типы
В отличие от ссылочных типов нельзя присвоить null но можно тем же синтаксисом что и у
ссылочных то есть знаком вопроса по факту знак вопроса это сокращенная запись структуры
System. Nullable <Т>
Эта структура имеет два свойства
Lower – значение, но если будет null будет ошибка (.value)
Hasvalue – возвращает true если объект хранит некоторое значение и false если объект равен null
А также метод getvalue or default возвращает значение переменной если она не равна нулю а если
равна то значение по умолчанию для чисел это 0
Операции с Nullable типами
Поддерживают тот же набор операций что и простые, но если в операции участвует nullable тип то
и ответ должен быть типа nullable и в арифметических операций если один операнд null тои
результат операции будет null
Download