Similar presentations:
Лекция 10
1. Типы значений и ссылочные типы
Типы данных можно разделить на типы значений, еще называемые значимыми типами, (value types) и ссылочные типы (reference types)Типы значений:
Целочисленные типы (byte, sbyte, short, ushort, int, uint, long, ulong)
Типы с плавающей запятой (float, double)
Тип decimal
Тип bool
Тип char
Перечисления enum
Структуры (struct)
Ссылочные типы:
Тип object
Тип string
Классы (class)
Интерфейсы (interface)
Делегаты (delegate)
2.
class Program{
static void Main(string[] args)
{
Calculate(5);
}
static void Calculate(int t)
{
int x = 6;
int y = 7;
int z = y + t;
}
}
3.
static void Calculate(int t){
object x = 6;
int y = 7;
int z = y + t;
}
4.
State state1 = new State();Country country1 = new Country();
struct State
{
public int x;
public int y;
}
class Country
{
public int x;
public int y;
}
5.
State state1 = new State();Country country1 = new Country();
struct State
{
public int x;
public int y;
public Country country;
public State()
{
x = 0;
y = 0;
country = new Country();
}
}
class Country
{
public int x;
public int y;
}
6.
State state1 = new State(); // Структура StateState state2 = new State();
state2.x = 1;
state2.y = 2;
state1 = state2;
state2.x = 5; // state1.x=1 по-прежнему
Console.WriteLine(state1.x); // 1
Console.WriteLine(state2.x); // 5
Country country1 = new Country(); // Класс Country
Country country2 = new Country();
country2.x = 1;
country2.y = 4;
country1 = country2;
country2.x = 7;
Console.WriteLine(country1.x); // 7
Console.WriteLine(country2.x); // 7
7.
State state1 = new State();State state2 = new State();
state2.country.x = 5;
state1 = state2;
state2.country.x = 8;
Console.WriteLine(state1.country.x); // 8
Console.WriteLine(state2.country.x); // 8
struct State
{
public int x;
public int y;
public Country country;
public State()
{
x = 0;
y = 0;
country = new Country();
}
}
class Country
{
public int x;
public int y;
}
8.
Person p = new Person { name = "Tom", age = 23 };ChangePerson(p);
Console.WriteLine(p.name); // Alice
Console.WriteLine(p.age); // 23
void ChangePerson(Person person)
{
// сработает
person.name = "Alice";
// сработает только в рамках данного метода
person = new Person { name = "Bill", age = 45 };
Console.WriteLine(person.name); // Bill
}
class Person
{
public string name = "";
public int age;
}
9.
erson p = new Person { name = "Tom", age = 23 };ChangePerson(ref p);
Console.WriteLine(p.name); // Bill
Console.WriteLine(p.age); // 45
void ChangePerson(ref Person person)
{
// сработает
person.name = "Alice";
// сработает
person = new Person { name = "Bill", age = 45 };
}
class Person
{
public string name = "";
public int age;
}
10. Область видимости (контекст) переменных и констант
Каждая переменная доступна в рамках определенного контекста илиобласти видимость. Вне этого контекста переменная уже не существует.
Существуют различные контексты:
• Контекст класса. Переменные, определенные на уровне класса,
доступны в любом методе этого класса. Их еще называют
глобальными переменными или полями
• Контекст метода. Переменные, определенные на уровне метода,
являются локальными и доступны только в рамках данного метода. В
других методах они недоступны
• Контекст блока кода. Переменные, определенные на уровне блока
кода, также являются локальными и доступны только в рамках данного
блока. Вне своего блока кода они не доступны.
11.
Person tom = new();tom.PrintName();
tom.PrintSurname();
class Person
{
string type = "Person";
public void PrintName()
{
string name = "Tom";
{
string shortName = "Tomas";
Console.WriteLine(type);
Console.WriteLine(name);
Console.WriteLine(shortName);
}
Console.WriteLine(type);
Console.WriteLine(name);
//Console.WriteLine(shortName); //так нельзя, переменная c определена в блоке кода
//Console.WriteLine(surname);
}
public void PrintSurname
{
string surname = "Smith";
Console.WriteLine(type
Console.WriteLine(surname
}
}
//так нельзя, переменная surname определена в другом методе
12.
class Person{
string name = "Tom";
public void PrintName()
{
string name = "Tomas";
Console.WriteLine(name); // Tomas
}
}
13. Пространства имен
Обычно определяемые классы и другие типы в .NET не существуют самипо себе, а заключаются в специальные контейнеры - пространства имен.
Пространства имен позволяют организовать код программы в
логические блоки, поволяют объединить и отделить от остального кода
некоторую функциональность, которая связана некоторой общей идеей
или которая выполняет определенную задачу.
namespace имя_пространства_имен
{
// содержимое пространства имен
}
14.
Person tom = new Person("Tom"); // Ошибка - Visual Studio не видит класс Persontom.Print();
namespace Base
{
class Person
{
string name;
public Person(string name) => this.name = name;
public void Print() => Console.WriteLine($"Имя: {name}");
}
}
15.
Base.Person tom = new("Tom");tom.Print();
// Имя: Tom
namespace Base
{
class Person
{
string name;
public Person(string name) => this.name = name;
public void Print() => Console.WriteLine($"Имя: {name}");
}
}
16. Подключение пространства имен
using Base;Person tom = new("Tom");
tom.Print();
// Имя: Tom
namespace Base
{
class Person
{
string name;
public Person(string name) => this.name = name;
public void Print() => Console.WriteLine($"Имя: {name}");
}
}
17.
namespace Base{
namespace PersonTypes
{
class Person
{
}
}
namespace OrganisationTypes
{
class Company
{
}
}
}
18. Пространства имен уровня файла
19.
namespace Base;class Person
{
string name;
public Person(string name) => this.name = name;
public void Print() => Console.WriteLine($"Имя: {name} ");
}
using Base; // подключение пространства имен Base
Person tom = new("Tom");
tom.Print();
programming