Типы значений и ссылочные типы
Область видимости (контекст) переменных и констант
Пространства имен
Подключение пространства имен
Пространства имен уровня файла
Глобальные пространства имен
259.20K
Category: programmingprogramming

Лекция 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(); // Структура State
State 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 не видит класс Person
tom.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();

20. Глобальные пространства имен

global using подключаемое_пространство_имен;
English     Русский Rules